使用 GCC 预处理 C 代码
我有一些需要预处理的 C 源文件,以便我可以使用另一个应用程序在我的文件中添加代码覆盖率检测代码。 为此,我使用 GCC(我在 LEON2 处理器上使用它,所以它进行了一些修改,但本质上是 GCC 3.4.4)和以下命令行:
sparc-elf-gcc -DUNIT_TEST -I. ../Tested_Code/0_BSW/PKG_CMD/MEMORY.c -E > MEMORY.i
使用标准文件,这可以完美地工作,但是程序员使用了这个#ifndef UNIT_TEST
关闭,无论我做什么,代码都不会被预处理。我不明白为什么,因为我将 -DUNIT_TEST
传递给 GCC 显式定义它。
有谁知道可能导致此问题的原因吗?我检查了生成的 .i 文件,正如预期的那样,其中不存在我的 UNIT_TEST
代码,因此在检测它时出现错误。
I have some C source files that need to be pre-processed so that I can use another application to add Code Coverage instrumentation code in my file.
To do so, I use GCC (I'm using this on a LEON2 processor so it's a bit modified but it's essentially GCC 3.4.4) with the following command line:
sparc-elf-gcc -DUNIT_TEST -I. ../Tested_Code/0_BSW/PKG_CMD/MEMORY.c -E > MEMORY.i
With a standard file this works perfectly, but this one the programmer used a #ifndef UNIT_TEST
close and no matter what I do the code won't be pre-processed. I don't understand why since I'm passing -DUNIT_TEST
to GCC explicitly defining it.
Does anyone have any clue what could cause this? I checked the resulting .i file and as expected my UNIT_TEST
code is not present in it so I get an error when instrumenting it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
#ifndef 中包含的任何内容只有在未定义的情况下才会被解析,因此您需要删除该定义才能获取该块内的所有代码。如果在预处理时未定义符号,则 GCC 无法吐出所有 #ifdef 和 #ifndef 的预处理信息。
Anything wrapped in an #ifndef will only be parsed if it's NOT defined so you need to remove that definition to get all the code that is inside that block. GCC can't spit out preprocessed info for all the #ifdef and #ifndef if at preprocessing times symbols are/aren't defined.