タグ付けされた質問 「c」

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

3
sizeof(int)が正しいのに、sizeof intが間違っているのはなぜですか?
私たちは、それが知っているsizeof任意のデータ型と式のサイズを計算するために使用される演算子であり、かつオペランドが式の場合は、括弧を省略することができます。 int main() { int a; sizeof int; sizeof( int ); sizeof a; sizeof( a ); return 0; } sizeof他の人が正しい間、の最初の使用法は間違っています。 gccを使用してコンパイルすると、次のエラーメッセージが表示されます。 main.c:5:9: error: expected expression before ‘int’ 私の質問は、C標準がこの種の操作を許可しない理由です。ウィルsizeof int任意のあいまいさを引き起こしますか?
96 c++  c  sizeof 

1
構造体宣言の最後にあるこの[1]の目的は何ですか?
私はMSP430マイクロコントローラーのヘッダーファイルを調べていましたが、次の場所で遭遇しました<setjmp.h>。 /* r3 does not have to be saved */ typedef struct { uint32_t __j_pc; /* return address */ uint32_t __j_sp; /* r1 stack pointer */ uint32_t __j_sr; /* r2 status register */ uint32_t __j_r4; uint32_t __j_r5; uint32_t __j_r6; uint32_t __j_r7; uint32_t __j_r8; uint32_t __j_r9; uint32_t __j_r10; uint32_t __j_r11; } …

6
値をビットフィールドに割り当てても同じ値が返されないのはなぜですか?
このQuoraの投稿で以下のコードを見ました。 #include <stdio.h> struct mystruct { int enabled:1; }; int main() { struct mystruct s; s.enabled = 1; if(s.enabled == 1) printf("Is enabled\n"); // --> we think this to be printed else printf("Is disabled !!\n"); } CとC ++の両方で、コードの出力は予想外です。 無効になっています !! あの投稿には「サインビット」に関する説明が載っていますが、どうやって設定したのか、そのまま反映されないのか分かりません。 誰かがより詳細な説明をすることはできますか? 注:両方のタグc & C ++それらの標準はビットフィールドを記述するためにわずかに異なるため、必須です。C仕様およびC ++仕様の回答を参照してください。

7
サイズとカウントを引数として取るfread / fwriteの根拠は何ですか?
ここで、freadとfwriteがメンバーあたりのサイズをとり、単にバッファーとサイズを取得するのではなく、読み取り/書き込みされたメンバーの数を数えて返す理由について、ここで議論しました。私たちが思いつくことができる唯一の用途は、プラットフォームの配置で均等に割り切れないためにパディングされているが、この選択を保証するほど一般的ではない構造体の配列を読み書きする場合ですデザインで。 FREAD(3) : 関数fread()は、streamが指すストリームから各サイズバイト長のデータのnmemb要素を読み取り、ptrで指定された場所に格納します。 関数fwrite()は、各サイズバイト長のデータのnmemb要素をstreamが指すストリームに書き込み、ptrで指定された場所から取得します。 fread()およびfwrite()は、正常に読み書きされた項目の数を返します(つまり、文字数ではありません)。エラーが発生した場合、またはファイルの終わりに達した場合、戻り値は短いアイテム数(またはゼロ)です。
96 c  libc 

3
Cで新しいディレクトリを作成する
ディレクトリの存在をチェックするプログラムを書きたいです。そのディレクトリが存在しない場合は、ディレクトリとその中にログファイルが作成されますが、ディレクトリがすでに存在する場合は、そのフォルダに新しいログファイルが作成されます。 LinuxのCでこれを行うにはどうすればよいですか?
96 c  linux  directory 


13
ネストされたループから抜け出す方法は?
breakステートメントを使用すると、内側のループのみが解除され、外側のループを解除するためにいくつかのフラグを使用する必要があります。ただし、ネストされたループが多数ある場合、コードは適切に表示されません。 すべてのループを解除する他の方法はありますか?(使用しないでくださいgoto stmt。) for(int i = 0; i < 1000; i++) { for(int j = 0; j < 1000; j++) { if(condition) { // both of the loops need to break and control will go to stmt2 } } } stmt2
96 c  nested-loops  break 

6
Visual StudioでのCプログラミング
Visual Studioを使用してCプログラミングを学ぶことはできますか?新しいプロジェクトメニューでは、Visual Basic、Visual C#、Visual C ++、Visual F#などを選択できますが、「C」または「Visual C」が表示されません。
96 c  visual-studio 

7
Cでのsetjmpおよびlongjmpの実用的な使用法
誰かが正確にsetjmp()そしてlongjmp()関数が組み込みプログラミングで実際に使用できる場所を私に説明できますか?これらはエラー処理用であることを知っています。しかし、私はいくつかのユースケースを知りたいのですが。
96 c 


5
ポインタアドレスとポインタの値をインクリメントする方法は?
仮定しましょう、 int *p; int a = 100; p = &a; 次のコードは実際に何をどのように実行しますか? p++; ++p; ++*p; ++(*p); ++*(p); *p++; (*p)++; *(p)++; *++p; *(++p); これはコーディングの面でやや面倒ですが、このようにコーディングすると実際に何が起こるか知りたいです。 注:のアドレスを想定してみましょう。アドレスが。のa=5120300ポインタに格納されています。さて、各ステートメントの実行後の値はどうなりますか?p3560200p & a
96 c  pointers 


3
「静的」または「extern」のない「インライン」は、C99でこれまで有用でしたか?
このコードをビルドしようとすると inline void f() {} int main() { f(); } コマンドラインを使用する gcc -std=c99 -o a a.c リンカエラーが発生します(への未定義の参照f)。エラーは、単にの代わりにstatic inlineまたはを使用した場合、またはコンパイルした場合に消滅します(そのため、関数は実際にはインライン化されています)。extern inlineinline-O この動作は、C99標準の6.7.4(6)項で定義されているようです。 変換単位内の関数のすべてのファイルスコープ宣言にinline関数指定子が含まれていないextern場合、その変換単位内の定義はインライン定義です。インライン定義は、関数の外部定義を提供せず、別の翻訳単位での外部定義を禁止しません。インライン定義は、外部定義の代替手段を提供します。トランスレーターは、同じ定義の関数への呼び出しを実装するために使用できます。関数の呼び出しでインライン定義を使用するか外部定義を使用するかは指定されていません。 これらすべてを正しく理解している場合inline、上記の例のように定義された関数を持つコンパイル単位は、同じ名前の外部関数もある場合にのみ一貫してコンパイルされ、自分の関数または外部関数が呼び出されるかどうかはわかりません。 この振る舞いは完全に行き詰まっていませんか?C99 inlineなしで、staticまたはexternC99で関数を定義することは、これまでに有用ですか?何か不足していますか? 回答のまとめ もちろん、私は何かを逃していた、そしてふるまいはふざけない。:) 以下のようニモを説明し、アイデアが入れてある定義関数のを inline void f() {} ヘッダーファイルと宣言のみ extern inline void f(); 対応する.cファイル内。extern宣言だけが、外部から見えるバイナリコードの生成をトリガーします。実際inline、.cファイルではは使用されていません。ヘッダーでのみ役立ちます。 以下のようジョナサンの答えの中で引用されたC99委員会の根拠 explicates、inlineコールのサイトに表示されるように関数の定義が必要なコンパイラの最適化についてのすべてです。これは、ヘッダーに定義を配置することによってのみ達成できます。もちろん、ヘッダー内の定義は、コンパイラーによって認識されるたびにコードを発行してはなりません。しかし、コンパイラーは実際に関数をインライン化する必要がないため、外部定義がどこかに存在している必要があります。
95 c  inline  c99 

13
プリプロセッサマクロで「sizeof」を使用するにはどうすればよいですか?
sizeofプリプロセッサマクロでを使用する方法はありますか? たとえば、私が長年にわたって次のようなことをしたいと思った状況はたくさんあります。 #if sizeof(someThing) != PAGE_SIZE #error Data structure doesn't match page size #endif 私がここでチェックしている正確なことは完全に構成されています-重要なのは、これらのタイプ(サイズまたは配置)のコンパイル時チェックを入れて、誰かがデータ構造を誤って調整したり再調整したりしないようにするためです。それらを壊すサイズのもの。 言うまでもなく-私はsizeof上記の方法でaを使用することができないようです。
95 c  gcc 

6
Cのチルダ演算子
ELFハッシュアルゴリズムでチルド演算子が使用されているのを見てきましたが、その機能に興味があります。(コードはEternally Confusedからのものです。) unsigned elf_hash ( void *key, int len ) { unsigned char *p = key; unsigned h = 0, g; int i; for ( i = 0; i < len; i++ ) { h = ( h << 4 ) + p[i]; g = h & 0xf0000000L; if ( …
95 c++  c  operators 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.