我寫一個簡單的程序後按預期改變除了乘法的#define不工作和#undef使用的#ifndef
#include<stdio.h>
#define ADD(X,Y) X+Y
void fun()
{
#ifndef ADD(X,Y)
printf("entered #ifndef");
#define ADD(X,Y) X*Y;
#endif
int y=ADD(3,2);
printf("%d",y);
}
int main()
{
#undef ADD(X,Y)
fun();
return 0;
}
我期望的輸出是3*2
但代碼仍然輸出3+2
即5。
代碼不輸出:"entered #ifndef"
,那意味着#undef
不起作用? 這裏有什麼問題?
編輯: 由於@deviantfan
下面是正確的代碼:
#include<stdio.h>
#define ADD(X,Y) X+Y
void fun();
int main()
{
#undef ADD(X,Y)
fun();
return 0;
}
void fun()
{
#ifndef ADD(X,Y)
printf("entered #ifndef");
#define ADD(X,Y) X*Y;
#endif
int y=ADD(3,2);
printf("%d",y);
}
*警告:額外的令牌在的#ifndef指令結束[-Wextra的令牌] * – chris 2015-04-05 19:08:26
'#undef'什麼也不做在這裏。預處理指令在代碼中進行處理,如果它們位於函數內部,則爲regargless(在您的情況下爲'fun()')。 – myaut 2015-04-05 19:09:40