2017-01-30 14 views
0

私はこのマクロが関数呼び出しで使われていない理由を理解していません。関数呼び出しでマクロを使用するには?

#define MAX 255; 
printf("max value %d", MAX); 

が、これは

#define MAX 255; 
int m = MAX; 
printf("max value %d", m); 

では コンパイルする前に値を代入プリプロセッサではありません。なぜ彼は不平を言っているのですか?

答えて

6

問題はセミコロン;です。それを削除:

#define MAX 255 

次のようにそうでなければ2個のコードサンプルが展開:

printf("max value %d", 255;); 

int m = 255;; 
printf("max value %d", m); 

それは無害空のステートメントをもたらす第二の場合には。最初はプログラムが不正です。

マクロ定義はではなく、ステートメントであることを覚えておいてください。これらは、トークン置換の実行方法を指示するプリプロセッサの指示です。

0
printf("max value %d", 255;); 

は無効な構文です。

int m = 255;; 
printf("max value %d", m); 

は合法です。

関連する問題