[英]Compile time checking existence of stdint.h
我正在使用遗留嵌入式C代码,它使用typedef
关键字在头文件中定义类型uint8_t, uint16_t
和uint32_t
。
为了讨论,让我们说文件typedefs.h
包含这些定义。
在我的新C源代码模块中,我包含了stdint.h
。 我还包括其他的头文件,其中包括typedefs.h
层次结构中的某处。 正如所料,编译器抱怨多个已定义的符号。
我想修改遗留文件typedefs.h
以便它只声明uint*_t
类型,如果没有包含stdint.h
或者如果未定义uint*_t
类型则更好。
我的理解是#ifndef
不能使用,因为typedef
不是预处理器指令。
那么如果它们已经存在(或者如果已经包含了stdint.h
),如何告诉编译器不定义uint*_t
?
注意:如果C规范定义的标准包含头文件的保护定义,这将很容易。
FWIW,我正在使用Green Hills编译器4.24,用于ARM9处理器。
我相信stdint.h
也应该为它定义的类型的限制定义一个宏。 您应该能够测试那些使用#ifdef
等的人。
#ifndef UINT32_MAX
typdef ... uint32_t;
#define UINT32_MAX ...
...
#endif
编辑:最初使用的是UINT32_MIN,但正如Jens Gustedt所说,这是一个没有签名/无符号和最小/最大的组合。
只需修复遗留标头以始终包含stdint.h
以获取这些类型,删除重复的定义,并为缺少它的损坏系统提供一个插入文件stdint.h
。
如果您使用的是UNIX系统,那么您应该备份一个步骤并使用配置包,如autoconf(1)或automake(1)。 它旨在处理这样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.