条件编译中能不能出现“或”??如:#ifdef DEF_A | DEF_B ...

youngrin 2005-07-14 12:09:18
#ifdef DEF_A | DEF_B
代码A
#endif

我想在DEF_A或者DEF_B被定义时执行代码A,正常的定义应该是怎么样的呢?!
...全文
1516 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
megaboy 2005-07-14
  • 打赏
  • 举报
回复
哦,楼主是这个意思啊?

对于#ifdef DEF_A | DEF_B合不合法,单就合法否这个意思来说,这句话可以认为是合法的,但是,注意了,呵呵,但是!它达不到你的预期。

因为,#ifdef(包括ifndef)后面跟的是标识符,不是表达式,编译器在进行预处理的时候,#ifdef DEF_A | DEF_B这句话能通过预处理,但是因为A后面有个空格,预处理器认为DEF_A这个标识符到这里结束了,因此这个空格后面的字符被忽略。

第二,所有预处理指令都是不进行运算的,|是一个位运算符,因此|不能在预处理里面使用,即使是后面跟常量表达式的#if条件编译,也不能使用它,就是说,#if DEF_A | DEF_B是非法的,不能通过预处理,#if后面可以使用关系表达式或逻辑表达式,比如#if DEF_A || DEF_B。

楼主明白了吧?
mlwu3 2005-07-14
  • 打赏
  • 举报
回复
感觉不很合法
#if defined DEF_A || defined DEF_B
youngrin 2005-07-14
  • 打赏
  • 举报
回复
呵呵,我是说:
#ifdef DEF_A | DEF_B
这样写是否合法。。。
megaboy 2005-07-14
  • 打赏
  • 举报
回复
在楼上那条件编译之前,使用以下预处理编译就行了:

#define DEF_A 或者
#define DEF_B

24,853

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧