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.

[参考译文] TMS320F280039:预处理器比较运算符仅适用于整数类型、预处理器无法正确解析类型转换

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1614760/tms320f280039-preprocessor-comparison-operators-only-work-on-integer-types-and-preprocessor-is-not-able-to-parse-type-casts-correctly

器件型号: TMS320F280039

这种简单的预处理器健全性检查

#if (1.0 < 0.0)

抛出构建错误

错误#31:表达式必须具有整数类型

#if (1<0) 按预期工作。

即使尝试使用 (int) 类型转换将 double 表达式转换为整型表达式也不起作用:

#if ((int) 1.0 <(int) 0.0) 导致出现以下错误消息:

错误#18:预期为“)“

我真的很困惑、因为到目前为止我所接触的每个预处理器(包括旧版 TI 预处理器)都能够评估双表达式并接受类型转换。

为了使预处理器按预期工作、我是否需要检查任何编译器选项?

 

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

    您好、Oliver:  

    引导该线程加入我们的编译器团队。

    此致、

    Allison

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

    尊敬的 Allison:

    谢谢、我找到了一个很好的解决方案:在项目配置工具->C2000 编译器->Advanced Options->Language Options 中、我将 C 语言设置为“C11 mode“。 然后、我可以使用宏“_Static_assert(断言,错误消息)“来检查涉及 C 类型的断言。