首页 > 解决方案 > GCC预处理器如何用空行替换#define

问题描述

我正在尝试将 GCC 预处理器与 Javascript 源代码一起使用。

我想在原始源和输出之间保持行号相同。这样如果输出中的 JS 代码有任何错误,行号应该与原始文件中的行号匹配。

我想从此输入实现以下输出:

Line 1 // comment
Line 2 #define ASDF 'asdf'
Line 3
Line 4 var asdf = ASDF

输出:

Line 1 // comment
Line 2 
Line 3 
Line 4 var asdf = 'asdf'

我怎样才能实现上述目标?

到目前为止,我已经尝试过:

/usr/bin/cpp -P -undef -Wundef -std=c99 -nostdinc -Wtrigraphs -fdollars-in-identifiers -traditional-cpp -E -C $INFILE -o $OUTFILE

-traditional-cpp保留空白,保留-E注释。

是否可以用空行的预处理器指令替换所有行?

标签: javascriptgccc-preprocessorpreprocessorpreprocessor-directive

解决方案


跑步

gcc -xc file.c -E -P -o file.txt

反对(3行)

#define ASDF 'asdf'

var asdf = ASDF

产量(1 行)

var asdf = 'asdf'

因此,并不是所有请求的行都是空的,而是它们被完全删除了。也许这符合你的目的?有了-traditional-cpp,有一堆空行,但不知道它们来自哪里......添加以查看打印-v发出的子命令:gcc

.../cc1 -E -quiet -v -P -o file.txt <irrelevant-options>

附录1:为了保留评论,添加-C

cpp file.c -E -P -C -nostdinc

我需要,-nostdinc 因为否则 gcc 会包括/usr/include/stdc-predef.h. 但是空行仍然被删除。


推荐阅读