【发布时间】:2015-04-05 19:06:39
【问题描述】:
我写了一个简单的程序来改变乘法的加法
#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-tokens] 末尾的额外标记
-
#undef在这里什么都不做。预处理器指令在代码中进行处理,无论它们是否在函数内部(在您的情况下为fun())。
标签: c c-preprocessor