2017-11-17 10 views
0

이 프로그램은 사용자로부터 입력을 얻고 2라는 매크로에 저장하려고 시도하지만 매크로를 인쇄 할 때 1 출력으로 ... 왜 그게?#define two scanf ("% d", & two)를 사용하면 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)'로 확장되는'two'라는 이름의 _preprocessor_ 매크로를 생성합니다. printf ("% d \ n", 두)에서'two '에 대한 언급은'printf ("% d \ n", scanf ("% d", &two));')로 확장되는 매크로를 호출합니다. 오스틴의 반응이 나타나는 곳입니다. –