2017-11-17 5 views
0

このプログラムは、ユーザーからの入力を取得し、2という名前のマクロに格納しようとします。出力として1 ... それはなぜですか?#define 2つのscanf( "%d"、&2)を使用すると、4を入力した後に出力1を得ます。

#include <stdio.h> 
//declares two 
int two; 
//Takes input to store it in two 
#define two scanf("%d",&two) 
int main() 
{ 

     printf("%d\n",two); 

return 0; 
} 
+0

マクロの定義内で、変数a)変数b)マクロc)に同じ識別子を使用しないことをお勧めしますか? – Yunnosch

答えて

0

あなたが見ているのは、scanfが返す値です。戻り値は、scanfが正常に入力された項目の数です(この場合は1項目です)。 http://www.cplusplus.com/reference/cstdio/scanf/

+0

明確にするために(Mihirの利益のために)、 '#define two scanf("%d "、&two)'は "ユーザーからの入力を得ず、それをマクロに保存"しません。 'scanf("%d "、&two)'に展開する '2'という名前の_preprocessor_マクロを作成するだけです。 'printf("%d \ n "、two);で' two 'のあなたの言及は 'printf("%d \ n "、scanf("%d "、&two));')に展開されるマクロを呼び出します。オースティンの反応が拾い上げる場所です。 –

関連する問題