#include <stdio.h>
#define DEBUG
#ifdef DEBUG
#define MAGIC 5
#endif
int main(void){
printf("\n magic is %d",MAGIC);
return 0;
}
现在我想unf DEBUG所以这个程序应该给出编译错误
gcc test.c -U DEBUG
但它没有给出任何错误并且工作正常。
这意味着-U
不起作用。
那么如何在编译时在gcc中取消任何名称?
答案 0 :(得分:2)
man GCC说,
-D and -U options are processed in the order they are given on the command line.
似乎你无法从程序中定义的CLI
中取消定义MACRO。
答案 1 :(得分:2)
#include <stdio.h>
#define DEBUG
// add some new lines
#if defined(CUD_DEBUG) && defined(DEBUG)
#undef DEBUG
#endif
#ifdef DEBUG
#define MAGIC 5
#endif
int main(void)
{
printf("\n magic is %d", MAGIC);
return 0;
}
通过命令编译:
gcc test.cc -DCUD_DEBUG
CUD_DEBUG表示编译器取消定义调试。
答案 2 :(得分:0)
您应该像这样编写代码
#include <stdio.h>
//#define DEBUG
#ifdef DEBUG
#define MAGIC 5
#else
#define MAGIC 1
#endif
int main(void){
printf("\n magic is %d",MAGIC);
return 0;
}
现在gcc test.c -U DEBUG
可以使用
答案 3 :(得分:0)
不要在程序中定义DEBUG。相反,在编译时将DEBUG定义为gcc test.c -DDEBUG
。
如果您想在编译时遇到错误,请不要在编译时将DEBUG
定义为gcc test.c
:
test.c: In function "main":
test.c:8: error: "MAGIC" undeclared (first use in this function)
test.c:8: error: (Each undeclared identifier is reported only once
test.c:8: error: for each function it appears in.)