1

我需要调试带有大量宏的 C 代码,其中一堆宏根本不重要,它们包括几行(很多)。这使得调试变得不可能,因为宏在一行中展开,你永远不知道错误来自哪里。另一方面,很容易sed获取预处理器输出并在每个分号后添加行。

我不会讨论使用这些宏的好习惯,因为我对此无能为力。但是我想知道是否可以在预处理和编译之间为编译器添加一个阶段(我使用了几个编译器:icc、gcc、xlc),所以我运行了那个sed命令。

4

3 回答 3

3

您可以做的是仅运行预处理器(-E):

 $ g++ -E in.c -o in.i

然后运行您的 sed 脚本并使用 g++ 编译它的输出(这次没有 -E)。我敢肯定,您可以在 Makefile 中构建一个规则来执行所有这些操作。

于 2013-04-09T14:49:03.023 回答
0

到目前为止,我将尝试使用我在这篇文章中找到的内容。我还尝试了使用包装器来编译单个文件的选项,目前,它可以解决问题。在包装器中,我预处理(使用-E)文件,然后使用sed一些规则处理预处理的文件,然后编译它。

于 2013-04-11T14:39:23.923 回答
0

将您自己的“编译器”定义为要运行的脚本g++ -E,然后定义您的sed-mangler,然后g++将其指定为整个编译器。请注意使用 的临时文件mktemp,因此并行启动编译 ( make -j) 不会把事情搞砸。

(今天的 GCC 不再有单独的预处理步骤,因此无论如何都不能轻松地在那里注入一些东西。)

于 2013-04-12T18:11:03.983 回答