我正在使用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");
}
我正在使用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");
}
您可以使用脚本注释掉每个#include,运行 cpp,然后删除这些注释。
不,这是不可能的。但是,行信息通常#
在以预处理器输出开头的行中可用。
您可能可以使用其他一些预处理器,例如gpp
如果我理解正确,您想使用预处理器只预处理某些部分而不是其他部分。这通常是不可能的。做到这一点的唯一方法是向源添加条件,即使用 eg#ifdef
和#endif
围绕您要扩展的部分,并将命令行上的定义传递给预处理器。