是否有可能沿着这些方向做点什么:
#define import_and_other(s)\
something\
#include s
这样:
import_and_other("file.h")
变为:
something
#include "file.h"
基本上,某些文件在包含之前总是需要采取相同的操作,所以我想结束#include来执行这些操作。
答案 0 :(得分:2)
没有!
C99标准说(第6.10.2节):
表单
的预处理指令允许使用# include pp-tokens new-line
(与前两种形式中的一种不匹配)。预处理 指令中包含的标记与正常文本一样处理。 (每 当前定义为宏名称的标识符将替换为其替换列表 预处理令牌。)所有替换后产生的指令应匹配其中一个 以前的两种形式。
但是,还有另一条规则(第10.6.3.2节,关于“#运营商”)说:
类似函数宏的替换列表中的每个#preprocessing token都应该是 后跟一个参数作为替换列表中的下一个预处理标记。
宏扩展中的'#include s'未通过此约束 - 单词'include'不是类宏函数的参数。
这可以防止您生成(可用)'#include'指令。无论如何,在宏观扩张期间,还有另一条规则(第10.6.3.4节)说:
不处理由此产生的完全宏替换的预处理标记序列 作为预处理指令,即使它类似于一个。
这意味着您无法从宏扩展的结果生成任何预处理器指令。
遗憾的是,你的努力注定要失败。
答案 1 :(得分:1)
不,但您可以创建自己的包含文件,然后#include它。使用您选择的import_and_other名称命名头文件。 #define替换文本是注意真正的多行,它只是为了您的利益而包装。
答案 2 :(得分:1)
我对此表示怀疑。但是可以通过包含另一个文件来实现相同的目的,并在该文件中执行您想要的任这将实现您的目标。