0

次のコードがコンパイルされない理由がわかりません。

#include <iostream>
#define SHORT_NAME 4;

int func(int arg)
{
    return arg;
}

int main()
{
    return func(SHORT_NAME); // Error: expected a ')'
}

const int SHORT_NAME = 4代わりに2行目で使用する必要がありますか?

4

3 に答える 3

7

SHORT_NAME前処理後に次のように展開されるため、マクロからセミコロンを削除します。

 return func(4;);

またはconst int、質問で提案するように使用します。マクロとの説明については、「staticconst」と「#define」と「enum」を参照してくださいconst

于 2012-12-13T10:47:36.130 に答える
2

プリプロセッサはMACRO名を展開します。したがって、この:

return func(SHORT_NAME);  

これになります:

return func(4;); 

それは間違いなく構文エラーですよね?

したがって、MACROを定義せずに定義すると、次の;ように機能します。

#define SHORT_NAME 4  //without ;

代わりに、2行目でconst int SHORT_NAME = 4を使用する必要がありますか?

はい。頑張れ。とにかく、マクロは悪です(ほとんどの場合)。

于 2012-12-13T10:48:09.757 に答える
2

定義にセミコロンは必要ありません。代わりにこれを書いてください

#define SHORT_NAME 4

ただし、const intC ++を使用する場合は、使用する方が確実に適しています。

于 2012-12-13T10:48:22.893 に答える