假设我们有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(); };
如果可能的话,我该如何调整扩展深度?
答案 0 :(得分:2)
简单回答(至少对于我所知道的C预处理器):
你不能 - 不是一般情况下。通过递归扩展宏,并且不能使用例如GNU cpp
设置递归深度。
在特定情况下,“外部”和“内部”宏在不同的文件中定义,您可以稍微实现您想要的只是不包括(或提供一个空的包含)定义“外部”定义并将带有“内部”定义的文件直接送入cpp。
的文件 但是,我确实有一个嵌入式系统的cpp实现,当以最高详细程度(“-vvv”)执行时,实际上确实打印每个递归步骤到stderr,尽管这不是帮助你使用gcc / cpp - 但这至少表明你想要的东西在技术上是可行的。