免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3465 | 回复: 6
打印 上一主题 下一主题

在if...else体系中无法放入相同宏定义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-21 19:23 |只看该作者 |倒序浏览
代码如下:

  1.     if (PLATFORM_MINOR_VER == 0){
  2.         #define SPITXD SPITXD_A
  3.     }else{
  4.         #define SPITXD SPITXD_B
  5.     }
复制代码


编译时使用-DPLATFORM_MINOR_VER=0开关。
gcc报告重复定义SPITXD。

自己想想也很蠢,宏定义是在预编译期进行的,当然不会理会if语句。

如果要实现根据编译时的宏定义来给其它的宏在预编译期赋予不同的值,该怎么实现呢,求教。。。

[ 本帖最后由 Sworder 于 2007-5-21 20:24 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-05-21 19:32 |只看该作者
.

宏用预处理器指令 (preprocessor directives) 来定义,这个在语句 (statements) 被编译之前已经过滤掉了,可以说编译器不知道任何关于宏定义的事情。

.

论坛徽章:
0
3 [报告]
发表于 2007-05-21 19:33 |只看该作者
可是难倒要实现这种功能我不得不放弃宏定义改用const定义常量了吗?

论坛徽章:
0
4 [报告]
发表于 2007-05-21 19:34 |只看该作者
#if
   
#elif
   
#else    /* all others */
   
#endif

论坛徽章:
0
5 [报告]
发表于 2007-05-21 19:34 |只看该作者
  1.     if (PLATFORM_MINOR_VER == 0){
  2.         #define SPITXD SPITXD_A
  3.     }else{
  4.         #define SPITXD SPITXD_B
  5.     }
复制代码


改用预处理器指令来实现:

  1.     #if (PLATFORM_MINOR_VER == 0)
  2.         #define SPITXD SPITXD_A
  3.     #else
  4.         #define SPITXD SPITXD_B
  5.     #endif
复制代码

论坛徽章:
0
6 [报告]
发表于 2007-05-21 19:36 |只看该作者
原帖由 gaocheng 于 2007-5-21 20:34 发表
#if
   
#elif
   
#else    /* all others */
   
#endif

PLATFORM_MINOR_VER有两种可能:

等于0
等于1

所以可否用
#if PLATFORM_MINOR_VER=0
#elif PLATFORM_MINOR_VER=1
#else
#endif
这样的语句呢?

论坛徽章:
0
7 [报告]
发表于 2007-05-21 19:36 |只看该作者
原帖由 langue 于 2007-5-21 20:34 发表
  1.     if (PLATFORM_MINOR_VER == 0){
  2.         #define SPITXD SPITXD_A
  3.     }else{
  4.         #define SPITXD SPITXD_B
  5.     }
复制代码


改用预处理器指令来实现:

[code]    #if (PLATFORM_MINOR_VER  ...

多谢!要的就是这个写法!!

非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP