2017-04-13 61 views
6

如果我处理与gcc -C -x c -E test.def以下test.def输入文件:有没有办法可以省略C预处理器输出顶部的定义(行标记)?

#define TEST foo 
int TEST; 

我想输出是公正:

int foo; 

相反,我得到:

# 1 "test.def" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "test.def" 

int foo; 

是否有我可以省略顶部的那些额外的行吗?

+1

这听起来像'尾巴-5'工作。 – unwind

+0

尝试'gcc -C -x c -E test.def |尾巴-n + 4“,但为什么? –

+0

@ n.m。我的工作在X-宏(见我最近的问题/解答),我想自动生成预处理文件,以减轻我的IDE(Eclipse中)和我的同事:)理解数据结构。 – Antonio

回答

7

这些不仅仅是在顶部 - 而是他们行标志,在C预处理器使用来传达的源代码位置,其中的某些行从何而来,C编译器。


随着GCC这是容易的,因为GCC supports the -P switchso does llvm Clang

-P。在 预处理器的输出中禁止生成线标记。当对不是C代码的预处理器运行时,这可能会很有用,并且会被发送到可能被线标记混淆的程序。

因此,使用gcc -E -P -x c

此外,我不会使用-C(保留评论),因为它似乎与gcc增加了一些来自隐式头文件的评论。

+0

太棒了!一个缺点是,它显然还删除新线(至少,这改变了,当我加入-P) – Antonio

+0

@Antonio啊,如此看来,却几乎不会没关系,现在会吗?它仍然是有效的来源。 –

+0

这很重要,因为我正在使用这个技巧来创建“人类可读的”代码。但我不得不反正添加'__CR__'后面将要取代(通过'sed'或类似的东西)与新线和一些空间更好的格式(如definining的结构时),因此增加一个'__SPACER__'赢得”不成问题 – Antonio

相关问题