0

Cの学習に関する以前の知識から、のようなプリプロセッサディレクティブはステートメントではないことがわかってい#includeます。そのため、名前が示すように、プログラムがコンパイルされる前のプロセスであるため、最後に#defineaを追加する必要はありません。;それ。

C ++では、新しいディレクティブが導入されますusingが、なぜこのディレクティブはセミコロンを追加するのですか?私はそれがステートメントではないところを私が学ぶ前の指令のようだと思いましたか?

4

2 に答える 2

5

usingプリプロセッサディレクティブではありません。これは、適切なコンパイラによって表示および分析されます。

;マクロの最後にaを付けないことが多いのは、#defineマクロがプリプロセッサによって「単純な」テキスト置換として処理されるためです。例:

#define SOMETHING "abcd";

...
   if (strcmp(thing, SOMETHING) == 0) { ... }
...

コンパイラは次のことを確認するため、コンパイラエラーになります。

   if (strcmp(thing, "abcd";) == 0) { ... }
                       //  ^ invalid here
于 2011-10-25T05:27:48.143 に答える
0

usingたとえば、のように、宣言であると考えることができますtypedef

また、コンパイラに前処理の結果を出力するように依頼することもできますがg++ -C -E、の効果を出力するように依頼する簡単な方法はありません。using

于 2011-10-25T05:31:22.837 に答える