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.

[参考译文] TMS320F28075:编译器选项-隐式转换检测

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1371488/tms320f28075-compiler-options---implicit-conversion-detection

器件型号:TMS320F28075

工具与软件:

您好!

我们使用的是 CCS 9.0.1.00004,编译器版本 TI v18.1.0.LTS,

 如果我们的案例中不存在该选项、我们需要激活以下选项:"-Wsign-compare"或等效选项。

强调其原因是,我们看到,有时比较负有符号整数和正无正数会导致负大于正数(我们假设隐式转换)

下面是这种情况的一个示例:

    int one = -5;
    unsigned int two = 5;

    if(one > two)
    {
        one++;
        one++;
        one++;
    }

谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    我们要激活以下 选项:"-Wsign-compare"或等效的

    构建 --问题_评论 你会看到一个诊断类似于...

    "file.c", line 8: remark: comparison between signed and unsigned operands

    Unknown 说:
    有时我们看到带符号的负整数和单个正数之间的比较会导致负值更大

    原因就在于需要 C 语言规范。  当运算将无符号表达式和有符号表达式组合在一起时、有符号表达式会隐式转换为无符号表达式。  只需重新解释各个位、就可以将有符号表达式转换为无符号表达式。  没有发生实际操作。  在本例中、-5变成0xFFfb。  为了强调这一点、我 使用编译器资源管理器尝试了该实验。  备注我设置选项 -O ,这意味着所有内容都已优化,除了呼叫 意想不到的 符合预期 。  对于我尝试过的每个编译器、我总是看到有人调用 意想不到的

    谢谢。此致、

    -乔治

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

    谢谢!

    您的回答给了我们一个诀窍、您所链接的在线编译器也可能对我们有所帮助。