1

我正在使用gnu cpp一些测试并希望它保留#include宏并同时扩展其他用户定义的宏。可能吗?这是一段代码(foo.c):

#include <stdio.h>
#define NEWLINE(str) str "\n"
int main(){
  puts(NEWLINE("foo"));
}

我希望结果cpp foo.c是:

#include <stdio.h>
int main(){
  puts("foo\n");
}
4

3 回答 3

1

您可以使用脚本注释掉每个#include,运行 cpp,然后删除这些注释。

于 2012-12-18T08:51:51.933 回答
0

不,这是不可能的。但是,行信息通常#在以预处理器输出开头的行中可用。

您可能可以使用其他一些预处理器,例如gpp

于 2012-12-18T08:18:22.067 回答
0

如果我理解正确,您想使用预处理器只预处理某些部分而不是其他部分。这通常是不可能的。做到这一点的唯一方法是向源添加条件,即使用 eg#ifdef#endif围绕您要扩展的部分,并将命令行上的定义传递给预处理器。

于 2012-12-18T08:21:10.387 回答