使用#define定义和#if定义以查看它是否已定义

时间:2010-11-04 04:33:17

标签: c gcc macros c-preprocessor

gcc 4.4.4 c89

我正在尝试定义一些东西。如果它被定义我想做某事,否则我想做一些不同的事情。

#define PARSE_STRING
    for(i = 0; i < NUMBER_OF_STRINGS; i++) {
#if defined (PARSE_STING)
    /* run code for parsing the strings */
#else
    /* run code that doesn't parse the strings
    }
#endif

当我在我的函数中尝试上面的代码时,我似乎在我的代码中得到了其他错误。但是,如果我注释掉#define PARSE_STRING它编译好了。我只是想知道我需要#define PARSE_STRING吗?

非常感谢任何建议,

======使用更新的解决方案进行编辑

这样做会更好吗,而不是吗?

#define PARSE_STRING
    for(i = 0; i < NUMBER_OF_STRINGS; i++) {
#if defined (PARSE_STRING)
    /* run code for parsing the strings */
#elif defined (NO_PARSE_STRING)
    /* run code that doesn't parse the strings
#endif
    }

3 个答案:

答案 0 :(得分:7)

您已经将预处理指令的交错与函数体的开头和结尾混合在一起:

}
#endif

应该是

#endif
}

答案 1 :(得分:2)

这是因为如果定义了它,你将不会有结束}这将是语法错误。

答案 2 :(得分:2)

您已在其中一个条件

中包含for循环的结束括号
#else
  }
#endif

应该是

#else
   //Stuff
#endif
}