【发布时间】:2017-01-20 11:00:35
【问题描述】:
假设我们有 main.c:
#define f() { \
foo(); \
bar(); \
}
#define F() { \
f(); \
f(); \
}
F();
现在如果我们gcc -E main.c -o main.i,在 main.i 中有:
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 11 "main.c"
{ { foo(); bar(); }; { foo(); bar(); }; };
如果我不想扩展内部宏(如f())怎么办。我怎样才能得到类似的东西:
# 1 "main.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "main.c"
# 11 "main.c"
{ f(); f(); };
如果可能的话,我该如何调整扩展深度?
【问题讨论】:
-
也许一个可能的解决方法,只有当你被允许更改源代码(即使在这种情况下,它仍然难以应用于大型项目),将注入正确的@987654326 @ 在合适的位置,可能在一些
#ifdef-#endif块中,以便通过命令行轻松激活/停用(通过-D)。不过,这仍然不是在所有情况下都有效。
标签: c gcc c-preprocessor