使用#ifdef宏不起作用

时间:2013-12-25 14:20:49

标签: c++ c

我正在使用MACRO来定义变量SUCESS

#ifdef SUCCESS
    #undef SUCCESS
    #define SUCCESS  0
#endif //SUCCESS

但Eclipse编译器给出了错误

symbol "SUCCESS" could not be resolved

但如果我写的只是

#define SUCCESS  0

工作正常。为什么会如此。我只能用#ifdef写

2 个答案:

答案 0 :(得分:6)

像这样改写:

#undef SUCCESS
#define SUCCESS 0

这样,无论先前是否已定义SUCCESS,您都可以获得定义。我还删除了#ifdef ... #endif包装器。不需要:如果尚未定义目标,则忽略#undef

答案 1 :(得分:1)

如果在这些预处理指令之前未定义SUCCESS,则不会定义任何SUCCESS宏(这是错误)。如果您之前定义SUCCESS,其值将按预期更改:

#define SUCCESS 1

#ifdef SUCCESS
    #undef SUCCESS
    #define SUCCESS  0
#endif //SUCCESS

int main(int argc, char *argv[]) {
    std::cout << SUCCESS;
    return 0;
}

正如您所见here