使用 GCC 预处理 C 代码

发布于 2024-12-07 03:31:33 字数 461 浏览 0 评论 0原文

我有一些需要预处理的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪冰清 2024-12-14 03:31:33

#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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文