This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS570LS3137:头文件中的宏在清理期间似乎不会被评估

Guru**** 2614265 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/648116/compiler-tms570ls3137-macros-within-header-files-do-not-appear-to-be-evaluated-during-a-clean

器件型号:TMS570LS3137

工具/软件:TI C/C++编译器

我附加了一个屏幕截图、其中显示了此问题。 下面的头文件不包括定义 debug_config_VARS_included 的头文件,所以预编译条件 #if (debug_config_VARS_included = true)应该被评估为 false,但它不是--请参阅屏幕截图将 SmalHoldEnable 和 EnableIntegroting 的定义显示为非灰色。

如果我们执行清理构建、则仍然未发现此错误;但是、如果我们编辑此特定的头文件、则会发现此错误。 看起来、clean 不会重新评估所有头文件。

谢谢、

Jim

 已发现。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我似乎无法让它在使用#if 时突出显示条件代码。  对于我、#ifdef 工作正常、但不是#if。

    索引器应在您保存文件后立即运行、您需要执行此操作以添加或删除包含定义的文件的#include。

    如果您将代码更改为#ifdef、然后让您的其他头文件定义或不定义 DEBUG_CONFIG_VARS_INDIT、它是否起作用?

    此外、包含#define 的头文件是项目的一部分、还是位于其他位置且仅由 include 路径引用的文件?

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试整理一个更完整的示例:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这毕竟不是一个错误;在 C 标准中、"include 形式的控制线 导致该行被文件名的全部内容替换"。 在我的特定示例中、我所附加的头文件代码段恰好在定义所需宏的另一个头文件之前。 如果我更改 了代码中#include 语句的顺序、则编译器会正确找到缺少的宏定义。
    谢谢、
    Jim
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jim、

    感谢您的介绍。 我觉得分度器可能有点混乱、但我无法引发问题。

    此致、
    John