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.

[参考译文] 编译器/TMS320F280049:va_arg (list、long);转换为 unsigned long 而不是 long (编译器发布)

Guru**** 2524460 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/888155/compiler-tms320f280049-va_arg-list-long-conversion-to-unsigned-long-and-not-long-compiler-issue

器件型号:TMS320F280049

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

这行代码:

 const long value =(long) va_arg (list、long);

生成以下输出:

这就解决了问题:

 const int32_t value11 = va_arg (list、int32_t);

更改名称的奇怪程度解决了问题。

这是代码的完整部分:

       案例(MSG_UINT32):
                   {
                       const uint32_t value = va_arg (list、uint32_t);
                       STATUS_MSG_DEBUCUS (0、__行_、MSG_UINT32、Modid、msid、 msg0、value);
                   }
                   中断;
       案例(MSG_Int32):
                   {
                       const int32_t value = va_arg (list、int32_t);//此值更改为 value11
                       STATUS_MSG_DETAUS (0、__LINE__、MSG_Int32、Modid、msid、 msg0、value);
                   }
                   中断;

因此、以某种方式重复使用先前值定义的定义。 没有全局值变量。

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

    [引用 USER="EV"]

    这就解决了问题:

     const int32_t value11 = va_arg (list、int32_t);

    [/报价]

    由于 long int32_t 是相同的类型、因此我看不出这是怎么可能的。  其他一些因素必须导致行为的变化。

    谢谢、此致、

    乔治

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

    乔治。 您可以相信我、也可以不相信。 更改变量名称可解决此问题。  

    我猜编译器是(重新)使用开关情况中括号外的变量。  请参阅交换机中先前的值声明。

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

    EV -我无法重现 CCSv9.3.0的问题。 如果您可以提供一个小型可重现测试用例、这将是非常好的。 我需要源文件和生成的可执行文件(*。out)。  

    谢谢

    Ki