关于取宏定义的问题 分不够可以再加!

blackpool 2007-07-30 03:05:16
关于宏的问题

在头文件scanTest.h中使用到如下两个宏: A_SCAN B_SCAN
用法如下:
class ScanTest
{
private:
A_SCAN
... ....
B_SCAN
}

两个宏分别在不同的地方有定义(不在scanTest.h中)

问题是现在B_SCAN想有两个不同的定义,选取哪一个定义取决于scanTest.h中
有没有使用到A_SCAN,不知如何修改代码:

#ifdef A_SCAN
#define B_SCAN
... ... (定义1)
#else
#define B_SCAN
... ... (定义 2)

如果这么做结果总是定义2,请大家给与指点
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2007-07-30
  • 打赏
  • 举报
回复
“不容许我随意改动 B_SCAN 为 B_SCAN_1 和 B_SCAN_2”
只要你向领导做了明确/有理的陈述,领导不可能不同意的。
我啃 2007-07-30
  • 打赏
  • 举报
回复
……还是那句话:和包含(或者说定义)顺序有关
你的测试只能说明前面有文件已经包含了A.H
blackpool 2007-07-30
  • 打赏
  • 举报
回复
Kenmark Thanks!

但是再次测试表明include的顺序没有关系 都是使用第二个B_SCAN
我啃 2007-07-30
  • 打赏
  • 举报
回复
……
a.h
#define A_SCAN xxxxxx

b.h
#ifdef A_SCAN
#define B_SCAN 1
#else
#define B_SCAN 0
#endif

test.cpp
如果是
#include "a.h"
#include "b.h"
那么B_SCAN就是1
如果是
#include "b.h"
#include "a.h"
那么B_SCAN就是0
blackpool 2007-07-30
  • 打赏
  • 举报
回复
taodm的建议的确是最简单也最不容易出错的方法! 但是现在我们这个项目定义了许多这样的宏 而且很多地方都这么用了 不容许我随意改动 B_SCAN 为 B_SCAN_1 和 B_SCAN_2

真心求教 有没有办法只保留B_SCAN呢?

p.s 试了一下 好像和头文件包含顺序没有关系
我啃 2007-07-30
  • 打赏
  • 举报
回复
恩,taodm的比较实际,我的太菜了~
奥爸 2007-07-30
  • 打赏
  • 举报
回复
taodm的建议最好
taodm 2007-07-30
  • 打赏
  • 举报
回复
建议你不要搞一个宏有2个不同定义的把戏,很容易把自己绕进去。
你还不如用的地方
#ifdef A_SCAN
B_SCAN_1
#else
B_SCAN_2
我啃 2007-07-30
  • 打赏
  • 举报
回复
要看文件包含顺序,先包含定义A的马么就会定义B2,否则会定义B1

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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