通过#define将变量传递给#include

时间:2010-01-23 01:40:40

标签: c c-preprocessor

是否有可能沿着这些方向做点什么:

#define import_and_other(s)\
something\
#include s

这样:

import_and_other("file.h")

变为:

something
#include "file.h"

基本上,某些文件在包含之前总是需要采取相同的操作,所以我想结束#include来执行这些操作。

3 个答案:

答案 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)

我对此表示怀疑。但是可以通过包含另一个文件来实现相同的目的,并在该文件中执行您想要的任这将实现您的目标。