我偶然发现了以下谜题
#include <stdio.h>
int main()
{
{
/*Fill in something here to make this code compile
...........
*/
ooOoO+=a;
}
#undef ooOoO
printf("%d",ooOoO);
return 0;
}
简而言之,我想问一下ooOoO
之后如何在printf中使用#undef
?
答案 0 :(得分:11)
您需要将其声明为变量:
#define ooOoO int ooOoO = 42; int a = 1; { ooOoO
宏替换是非递归的;在替换ooOoO
时,标识符ooOoO
不会被视为宏名称。
如果您正在寻找不使用宏的解决方案,那么您可以简单地忽略#undef
指令,并且永远不会将ooOoO
声明为宏。在C和C ++中允许#undef
未定义为宏的标识符。
答案 1 :(得分:6)
重新格式化代码(缩进)并添加解决方案之后,这就是我收到的内容:
#include <stdio.h>
int main()
{
{
/*-Insert starts here-*/
}
int ooOoO = 0, a=3;
{
/*-Insert ends here-*/
ooOoO+=a;
}
#undef ooOoO
printf("%d",ooOoO);
return 0;
}
编译并打印3
答案 2 :(得分:3)
这个怎么样?
#include <stdio.h>
int main(){
int ooOoO = 0;
{
int a = 3;
ooOoO+=a;
}
#undef ooOoO
printf("%d",ooOoO);
return 0;
}
答案 3 :(得分:1)
#include <stdio.h>
int main(){
{
/*Fill in something here to make this code compile
*/
}
int a = 0, ooOoO=0;
#define ooOoO ooOoO
{
/*
*/
ooOoO+=a;
}
#undef ooOoO
printf("%d",ooOoO);
return 0;
}
答案 4 :(得分:0)
#undef未定义预处理器的符号,因此它不会被其他东西替换,但是ooOoO仍然会进入编译器。