Tho*_*ews 7 c typedef uint32 stdint
我正在使用遗留嵌入式C代码,它使用关键字定义类型uint8_t, uint16_t和uint32_t头文件typedef.
为了讨论,让我们说该文件typedefs.h包含这些定义.
在我的新C源模块中,我包括stdint.h.我还包括其他头文件,包括typedefs.h层次结构中的某个位置.正如所料,编译器抱怨多个已定义的符号.
我想修改遗留文件,typedefs.h以便它只声明uint*_t类型,如果stdint.h没有包含或更好,如果uint*_t未定义类型.
我的理解是#ifndef不能使用,因为typedef它不是预处理器指令.
那么如何告诉编译器不定义uint*_t它们是否已经存在(或者是否stdint.h已经包含)?
注意:如果C规范定义的标准包含头文件的保护定义,这将很容易.
FWIW,我正在使用Green Hills编译器4.24,用于ARM9处理器.
我相信它stdint.h也应该为它定义的类型的限制定义一个宏.您应该能够测试那些使用a #ifdef等的人.
#ifndef UINT32_MAX
typdef ... uint32_t;
#define UINT32_MAX ...
...
#endif
Run Code Online (Sandbox Code Playgroud)
编辑:最初使用的是UINT32_MIN,但正如Jens Gustedt所说,这是一个没有签名/无符号和最小/最大的组合.