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.

[参考译文] 编译器/CODECOMPOSER:&quot 类型的参数;unsigned long *"与&quot 类型的参数不兼容;uint32_t*"

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/674349/compiler-codecomposer-argument-of-type-unsigned-long-is-incompatible-with-parameter-of-type-uint32_t

器件型号:CODECOMPOSER

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

我在 CCS 版本8.0.0.00016中使用 TI 编译器。 正在为 Tiva 129X ARM 处理器编译代码。  

我有一些代码将某些变量声明为"无符号长整型"、然后将指向这些变量的指针作为参数传递给 TivaWare 函数、该函数期望参数为"uint32_t*"。 编译器抱怨这些类型不兼容。 但是、根据编译器手册、"unsigned long"是一个32位值。 为什么编译器会在类型等效时生成警告? 如果没有禁用警告消息(这可能导致我缺少有效参数类型不匹配)、是否有任何方法可以解决此问题?

通常、我只需将 unsigned long 更改为 uint32_t 并使用它来完成。 但我尝试将使用不同编译器编写的旧代码移植到 CCS。 此警告将在数百个地方发生。

感谢你的帮助。

此致、

Dave

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

    [引用 user="Dave Hohl"]当类型等效时,编译器为什么会生成警告?

    这些类型并不完全等效。  uint32_t 类型为 unsigned int、而不是 unsigned long。  实际上、它们是等效的、因为 int 和 long 大小相同。  为了达到这一目的、在这种情况下、最新版本的 GCC 还会生成警告诊断。

    [引用 user="Dave Hohl"]是否有任何方法可以解决此问题,没有禁用警告消息(这可能导致我缺少有效参数类型不匹配)?

    显式转换到 uint32_t 将使诊断静音。  在这种情况下、我建议编写一些宏、这些宏会将调用打包到 TivaWare 函数中。  下面是一个我的意思的简单示例。

    #include 
    
    void hespt_ptr_UINT32_t (uint32_t * ptr);
    #define wrap_hes期望(arg) est_ptr_UINT32_t ((uint32_t *)(arg))
    
    ) extern unsigned long ul;
    
    void test ()
    {
    pese_ptr_Uint32_t (&ul);// diagnostic
    wrap_hesx (&ul); //无诊断
    } 

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 George 的快速回答。 我想开发旧版代码时使用的编译器比 CCS 和 GCC 更容易原谅。 我只需咬一个项目符号并清理现有代码。

    此致、

    Dave
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于某种原因,我的答复没有出现,尽管它接受了"解决我的问题"部分。 我要感谢你、George、你的快速回答。

    此致、

    Dave
x 出现错误。请重试或与管理员联系。