我想在文件中写一些东西(让我们调用它foo.cpp)并在编译时将它作为字符串包含到我的程序中,类似于#include它的方式.
现在我正在使用这个C预处理器#define:
#define toString(src) #src
Run Code Online (Sandbox Code Playgroud)
将一堆代码转换为字符串,如下例所示:
const char* str = toString(
int x;
void main(){}
);
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在那里阅读宏字符串化.
我想将该代码移动到外部文件,该文件将在编译时"链接". 我不希望文件必须与程序一起分发,如果我在运行时读取它就是这种情况.
我尝试使用#include如下所示的指令,但编译器拒绝了它:
const char* str = toString(
#include "foo.cpp"
);
Run Code Online (Sandbox Code Playgroud)
g++似乎完全困惑,但clang++给了我这个错误:
error: embedding a #include directive within macro arguments is not supported
Run Code Online (Sandbox Code Playgroud)
有谁知道是否/如何做到这一点?
注意:我正在使用它来编写我的GLSL着色器,尽管我怀疑这些信息是否有用.
PS:在你告诉我这是一个重复的问题之前,将我的代码放在一个巨大的字符串中,或者使用外部工具(例如xxd)来转储它的十六进制表示对我来说不是"解决方案",因为它们是不比我现在的方法更好(即更容易/更清洁).
几年后更新:
我刚刚意识到我从来没有回答过这个问题,因为它被重复关闭了.当我看到这个提交时,我找到了我正在寻找的答案,它本身基于对本文的评论,并且从那时起就一直在使用它.
简而言之,一个小的汇编文件包含您想要的文件NAME,并使用这三个变量在给定的文件下公开它们NAME_begin,NAME_end并NAME_len …