比方说,我有几个文件,它们都同样命名为:Foo1Bar.h
,Foo2Bar.h
,Foo3Bar.h
,等等等等。现在,我想自动包括一些main.c
在“插件”的风格,那就是,我不想必须记住#include
每个人。可以通过令牌粘贴来做到这一点吗?到目前为止,我已经:
// this is the only line I want to have to change if I add Foo4Bar.h
#define FOR_EACH_FOOBAR(T) T(1)T(2)T(3)
//... somewhere else in my code
#define RUN_SOME_FUNC(T) Foo##T##Bar().run();
上面的方法很好用(假设我的所有Foo*Bar.h
文件当然都有Foo*Bar
带有公共run()
方法的类。(如果不清楚,我的示例是C ++,但我不认为问题本身#include
是,是C ++所特有的) 。
我遇到麻烦的是,如果我也可以用自己的#include
陈述来做到这一点。代替
#include <Foo1Bar.h>
#include <Foo2Bar.h>
#include <Foo3Bar.h>
#include <Foo4Bar.h>
(对我来说)更改如下内容会更好:
FOR_EACH_FOOBAR(T) T(1)T(2)T(3)T(4)
FOR_EACH_FOOBAR(INCLUDE)
我试过了:
#define INCLUDE(T) #include <Foo##T##Bar.h>
但出现错误:'#' is not followed by a macro parameter
,因为它试图对开头部分进行字符串化。我尝试过的任何卷积或旋转都会导致相同(或相似)错误,并且我无法弄清楚如何逃避此错误#include
或如何使此错误生效。
有可能,如果可以,如何?如果没有,是否有确切的原因?
并不是您所需要的,因为#
命令是由预处理器处理的,它看起来也不太看是否#
扩展产生了另一个命令,但是有一些“生成”#include
行的功能,它们仅在#include
文本本身之后出现...
https://gcc.gnu.org/onlinedocs/cpp/Computed-Includes.html
在此处搜索“#包括其他内容”:https : //www.slac.stanford.edu/comp/unix/gnu-info/cpp_1.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句