我需要调试一个包含大量宏的C代码,其中一堆宏根本不是微不足道的,它们包括几行(很多)。这使得无法进行调试,因为宏在一行中扩展而您永远不知道错误的来源。另一方面,使用sed
轻松获取预处理器输出并在每个分号后添加行。
我不会讨论使用这些宏的好习惯,因为我对此无能为力。但是我想知道我是否可以在预处理和编译之间为编译器添加一个阶段(我使用几个编译器:icc,gcc,xlc),所以我使用sed
命令。
答案 0 :(得分:3)
您可以做的只是运行预处理器(-E):
$ g++ -E in.c -o in.i
然后运行你的sed脚本并用g ++编译它的输出(这次没有-E)。您可以在Makefile中构建一个执行所有操作的规则,我敢肯定。
答案 1 :(得分:0)
到现在为止,我将尝试使用this post中找到的内容。我还尝试了包装器的选项来编译单个文件,目前,它可以解决问题。在包装器中,我预处理(使用-E)文件,然后我用sed
和一些规则处理预处理文件,然后我编译它。
答案 2 :(得分:0)
将您自己的“编译器”定义为运行g++ -E
的脚本,然后是sed
- mangler,然后g++
,并指定一个作为编译器整体。注意使用mktemp
提供的临时性,因此并行开始编译(make -j
)不会搞砸。
(今天的GCC不再有单独的预处理步骤了,所以无论如何都不能轻易地注入一些东西。)