C语言 如何设置 gcC语言 E 深度(预处理级别)



假设我们有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(); };

另外,如果可能的话,我该如何调整扩展深度?

简单的答案(至少对于我知道的 C 预处理器):

你不能 - 不是在一般情况下。宏通过递归扩展,并且不能使用 GNU cpp 等 .

在特定情况下,"外部"和"内部"宏在不同的文件中定义,您可以通过简单地不包含(或提供空包含)定义"外部"定义的文件并将带有"内部"定义的文件直接输入到 cpp 中来实现您想要的。

但是,我确实有一个嵌入式系统的cpp实现,当以最高详细程度("-vvv")执行时,它实际上确实将每个递归步骤打印到stderr,尽管这对gcc/cpp没有帮助 - 但这至少表明你想要的东西在技术上是可行的。

最新更新