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.
工具/软件: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); //无诊断 }
谢谢、此致、
乔治