我正在处理传统的嵌入式C代码,该代码在头文件中使用typedef关键字定义了类型uint8_t、uint16_t和uint32_t。假设文件typedefs.h包含这些定义。
在我的新C源模块中,我包括stdint.h。我还包括其他头文件,它们在层次结构中的某个位置包括typedefs.h。正如预期的那样,编译器会抱怨多个已定义符号。
我想修改传统文件typedefs.h,以便仅在未包括stdint.h或更好地未定义uint*_t类型时才声明这些类型。
我的理解是由于typedef不是预处理器指令,因此不能使用#ifndef。那么我该如何告诉编译器不要定义uint*_t,如果它们已经存在(或者已经包括了stdint.h)?
注:如果C规范为头文件定义了标准包含保护定义,则此操作将很容易。
FWIW,我正在使用Green Hills编译器4.24,用于ARM9处理器。
在我的新C源模块中,我包括stdint.h。我还包括其他头文件,它们在层次结构中的某个位置包括typedefs.h。正如预期的那样,编译器会抱怨多个已定义符号。
我想修改传统文件typedefs.h,以便仅在未包括stdint.h或更好地未定义uint*_t类型时才声明这些类型。
我的理解是由于typedef不是预处理器指令,因此不能使用#ifndef。那么我该如何告诉编译器不要定义uint*_t,如果它们已经存在(或者已经包括了stdint.h)?
注:如果C规范为头文件定义了标准包含保护定义,则此操作将很容易。
FWIW,我正在使用Green Hills编译器4.24,用于ARM9处理器。
UINT32_MIN
不存在。可以使用UINT32_MAX
或者INT32_MIN
。 - Jens Gustedt