如何取消之前在gcc中内置或提供'-D'选项的名称定义

时间:2014-02-05 11:30:56

标签: c linux gcc

#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中取消任何名称?

4 个答案:

答案 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.)