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

CおよびC ++言語プログラムをコンパイルする前に適用されるテキストマクロプロセッサ。このタグは、Objective-CまたはC#の#ディレクティブなど、同じ機能から派生した、または同じ機能を持つ他のコンパイラ/言語に関する質問にも使用できます。


5
Cプリプロセッサが「linux」という単語を定数「1」と解釈するのはなぜですか。
GCCのCプリプロセッサが単語(小文字)を定数として解釈するのはなぜですか?linux1 test.c: #include <stdio.h> int main(void) { int linux = 5; return 0; } 結果$ gcc -E test.c(前処理段階の後で停止): .... int main(void) { int 1 = 5; return 0; } もちろんどちらがエラーになります。 (ところで:何もありません#define linuxでstdio.hのファイル。)
1022 c  linux  gcc  c-preprocessor 

9
マクロで明らかに無意味なdo-whileおよびif-elseステートメントを使用するのはなぜですか?
多くのC / C ++マクロで、無意味なdo whileループのように見えるマクロに囲まれたマクロのコードが表示されます。以下に例を示します。 #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else 私は何をしdo whileているのか分かりません。これなしでこれを書いてみませんか? #define FOO(X) f(X); g(X)
788 c++  c  c-preprocessor  c++-faq 


3
講師が作成したすべてのCファイルが最初の行の#で始まるのはなぜですか?
私はいくつかのCコースのノートを通過します。すべての Cプログラムのソースファイル#は、プログラムの最初の行の1つの行から始まります。 次に、空白行があり、その後にmain関数が続く他のものに続きます。 の理由は何#ですか? (現在、期限切れであり、実際に質問することはできません。) 次に例を示します。 # #include <stdio.h> int main() { printf("Hello, World!"); return 0; }
431 c  c-preprocessor 

4
C ++とCを組み合わせる-#ifdef __cplusplusはどのように機能しますか?
私は、多くのレガシーCコードを含むプロジェクトに取り組んでいます。最終的にレガシーコードを変換することも目的として、C ++での記述を開始しました。CとC ++の相互作用について少し混乱しています。C ++コンパイラでCコードをラップしてもextern "C"、Cコードの名前が壊れないことは理解していますが、これを実装する方法は完全にはわかりません。 したがって、各Cヘッダーファイルの先頭(インクルードガードの後)には、 #ifdef __cplusplus extern "C" { #endif 下部には、 #ifdef __cplusplus } #endif 2つの間に、すべてのinclude、typedef、および関数プロトタイプがあります。これを正しく理解しているかどうかを確認するために、いくつか質問があります。 CヘッダーファイルBhを含み、別のCヘッダーファイルCh を含むC ++ファイルA.hhがある場合、これはどのように機能しますか?コンパイラーがBhにステップイン__cplusplusすると、コードがラップされるextern "C" (__cplusplusこのブロック内で定義されない)と定義されていると思います 。したがって、Chにステップ __cplusplusインすると、は定義されず、コードはでラップされません extern "C"。これは正しいです? コードの一部をラップすることに問題はあり extern "C" { extern "C" { .. } }ますか?2番目extern "C" は何をしますか? このラッパーは.cファイルではなく、.hファイルのみに配置します。では、関数にプロトタイプがない場合はどうなりますか?コンパイラーはそれをC ++関数であると考えていますか? また、Cで記述されたサードパーティのコードも使用しており、この種のラッパーはありません。そのライブラリのヘッダーを含めるときはいつでもextern "C"、#includeを配置しています。これはそれに対処する正しい方法ですか? 最後に、これは良いアイデアですか?他にすべきことはありますか?近い将来、CとC ++を混合する予定です。すべてのベースをカバーできるようにしたいと思います。

14
CのMINおよびMAX
どこにMINありMAX、Cで定義されているとすれば、それはすべてですか? これらをできるだけ一般的に入力安全に実装するための最良の方法は何ですか?(主流のコンパイラー向けのコンパイラー拡張/ビルトインが望ましい。)
300 c  max  min  c-preprocessor 


6
GCCダンププリプロセッサが定義
OverаэтотвопросестьответынаStack Overflowнарусском:Какузнатьсписоквсехопределённыхмакросов? コマンドラインからgcc / g ++がプリプロセッサ定義をダンプする方法はありますか?以下のようなI平均の事__GNUC__、__STDC__など。
248 gcc  g++  c-preprocessor 

11
#pragma packエフェクト
誰かが#pragma packプリプロセッサステートメントの機能を説明できるかどうか、さらに重要なことには、なぜそれを使用する必要があるのか​​と思っていました。 いくつかの洞察を提供してくれたMSDNページをチェックアウトしましたが、経験のある人からもっと聞いてもらいたいと思っていました。以前はコードで見たことがありますが、もうどこにあるかわかりません。

12
#Cでデバッグ印刷用のマクロを定義しますか?
次の疑似コードのように、DEBUGが定義されているときにデバッグメッセージの印刷に使用できるマクロを作成しようとしています。 #define DEBUG 1 #define debug_print(args ...) if (DEBUG) fprintf(stderr, args) これはマクロでどのように行われますか?
209 c  c-preprocessor 


5
可変個のマクロの作成方法(引数の変数の数)
特定の数ではなく、任意の数のパラメーターを受け入れるマクロをCで記述したい 例: #define macro( X ) something_complicated( whatever( X ) ) どこX任意の数のパラメータであります whateverオーバーロードされており、2つまたは4つのパラメーターで呼び出すことができるため、これが必要です。 マクロを2回定義しようとしましたが、2番目の定義が最初の定義を上書きしました。 私が使用しているコンパイラはg ++(より具体的には、mingw)です。

16
プリプロセッサディレクティブでOSを確認するにはどうすればよいですか?
コードがコンパイルされるオペレーティングシステムに基づいて、さまざまなことを行うためにコードが必要です。私はこのようなものを探しています: #ifdef OSisWindows // do Windows-specific stuff #else // do Unix-specific stuff #endif これを行う方法はありますか?同じことをするより良い方法はありますか?


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