请教宏高手,宏如何展开#include,

敬畏者 2014-08-02 09:44:48
比如
#define includeExtern(a) #include a


编译结果因为 # 符号而错误
...全文
609 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2014-08-07
  • 打赏
  • 举报
回复
引用 18 楼 hanger1212 的回复:
[quote=引用 15 楼 Saleayas 的回复:]
#if _DEBUG
#define INCLUDE_FILE() "Debug.h"
#else
#define INCLUDE_FILE() "Release.h"
#endif

#include INCLUDE_FILE()
+1[/quote] 呵呵,直接把include放进里面不就好了吗?还多此一举
hanger1212 2014-08-07
  • 打赏
  • 举报
回复
引用 15 楼 Saleayas 的回复:
#if _DEBUG
#define INCLUDE_FILE() "Debug.h"
#else
#define INCLUDE_FILE() "Release.h"
#endif

#include INCLUDE_FILE()
+1
lm_whales 2014-08-07
  • 打赏
  • 举报
回复
引用 15 楼 Saleayas 的回复:
#if _DEBUG
#define INCLUDE_FILE() "Debug.h"
#else
#define INCLUDE_FILE() "Release.h"
#endif

#include INCLUDE_FILE()
这个方法似乎可以
赵4老师 2014-08-04
  • 打赏
  • 举报
回复
参考gcc源代码中#define和#include的实现逻辑。
Saleayas 2014-08-04
  • 打赏
  • 举报
回复
#if _DEBUG
#define INCLUDE_FILE() "Debug.h"
#else
#define INCLUDE_FILE() "Release.h"
#endif

#include INCLUDE_FILE()
敬畏者 2014-08-04
  • 打赏
  • 举报
回复
好吧,没有就没有了,只是多维护了两份重复的类名列表
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
其实 //#define A #if defiened (A) #include "A.h" #elif defined(B) #include "B.h" #else #include "C.h" #endif 应该足以满足大部分这种需求了。 如果还不能满足,可以直接生成头文件 //------------------ //inc.h #ifndef __INC_H__ //这里所有#include 指令全部使用程序生成 #include "a.h" #include "b.h" //...... .#endif 在你的程序里,写上 #include “inc.h” 就可以了 需要更新#include指令只要手动修改一下inc.h 或者调用你的程序,重新生成这个inc.h 就可以了
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
预编译语句不能,放在宏定义中使用。 C,C++没有办法扩展,带预编译语句的宏定义。 如果需要,自己写个预编译器,在编译前执行。 然后用编译器,编译经过你预编译后的文件。
luotuo44 2014-08-03
  • 打赏
  • 举报
回复
楼主还是把最原始的需求讲出来吧
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
更正一下: #if defined(A)
zilaishuichina 2014-08-02
  • 打赏
  • 举报
回复
通常是这样 #ifdef AAAAA #include "a.h" #else #ifdef BBBBB #include "b.h" #else #include "c.h" #endif #endif 或者是类似这样 #ifndef AAAAA #define BBBBB #endif #ifdef AAAAA #include "a.h" #endif #ifdef BBBBB #include "b.h" #endif
taodm 2014-08-02
  • 打赏
  • 举报
回复
宏不是万能的,别瞎折腾。 说你的原始需求。
  • 打赏
  • 举报
回复
宏里面 不能在用#include了 只能 #if xxx #include "a" #endif
Intel0011 2014-08-02
  • 打赏
  • 举报
回复
引用 楼主 u013573183 的回复:
比如 #define includeExtern(a) #include a 编译结果因为 # 符号而错误
宏展开是在预处理期进行的,你的#define在预处理期处理后,又出现的预处理指令#include 但此时预处理期已经结束,无法再处理预处理指令#include了
勤奋的小游侠 2014-08-02
  • 打赏
  • 举报
回复
据我所知, 是不能这样子实现的,#号在宏里面有特殊的意义。你不能将它当变量来用的。
707wk 2014-08-02
  • 打赏
  • 举报
回复
引用 6 楼 u013573183 的回复:
有没有什么 \# 之类的东西 把#的特殊含义转掉 从而可以正常的展开
你想多了。。。
碼上道 2014-08-02
  • 打赏
  • 举报
回复
设计 不合理,基本楼主要改一下想法了,这样也没有意义。说说你为啥想要这样做
  • 打赏
  • 举报
回复
引用 6 楼 u013573183 的回复:
有没有什么 \# 之类的东西 把#的特殊含义转掉 从而可以正常的展开
没有
敬畏者 2014-08-02
  • 打赏
  • 举报
回复
有没有什么 \# 之类的东西 把#的特殊含义转掉 从而可以正常的展开

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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