假设我有这个:
int main() { return a; }
我想调用编译器并编译它:
g++ a.cpp --PREPEND-CODE-FLAG="int a = 5;"
有办法做到这一点吗?
请注意,我知道我可以通过命令行插入a
的预处理器定义,但我正在寻找一种方法将实际的C ++代码添加到当前的翻译单元。
目前我正在使用该代码生成一个单独的标头,我将其包含在g ++ / clang的-I
标志中
答案 0 :(得分:3)
您已使用与不同C ++实施相关的多个标记来标记此问题,这表明您正在寻找跨平台解决方案。没有。
标准没有规定如何将翻译单元传递给编译器;它从不假设翻译单元是例如单个文件。如果您将g++
与标准shell一起使用,例如,您可以通过执行多个命令来组成翻译单元:
{
echo 'int a = 5';
echo '#line 1 a.cpp'
cat a.cpp
} | g++ -Wall -x c++ -
对于Unix平台上可用的大多数C ++编译器,这将起作用(略有变化),但显然不适合Windows平台。也许其他的事情会是。但是,无论您使用何种解决方案,都将根据您工作的环境进行单独制作。
答案 1 :(得分:0)
$ g++ -DPREPENDED_CODE="int a = 5;" nod.cpp
$ ./a.out
$ echo $?
5
$
其中nod.cpp是:
PREPENDED_CODE
int main()
{
return a;
}