【发布时间】:2010-09-07 18:36:31
【问题描述】:
我正在使用遗留的嵌入式 C 代码,它使用 typedef 关键字在头文件中定义了 uint8_t, uint16_t 和 uint32_t 类型。
为了讨论,假设文件typedefs.h 包含这些定义。
在我的新 C 源代码模块中,我包含了stdint.h。我还包括其他头文件,其中包括层次结构中某处的typedefs.h。正如预期的那样,编译器会抱怨多个已定义的符号。
我想修改旧文件 typedefs.h,使其仅在不包含 stdint.h 时声明 uint*_t 类型,如果未定义 uint*_t 类型则更好。
我的理解是不能使用#ifndef,因为typedef不是预处理器指令。
那么,如果 uint*_t 已经存在(或者如果 stdint.h 已经包含在内),我该如何告诉编译器不要定义它们?
注意:如果 C 规范定义的标准包括头文件的保护定义,这将很容易。
FWIW,我正在为 ARM9 处理器使用 Green Hills 编译器 4.24。
【问题讨论】: