gpt4 book ai didi

编译时检查 stdint.h 是否存在

转载 作者:太空狗 更新时间:2023-10-29 17:08:31 28 4
gpt4 key购买 nike

我正在处理遗留的嵌入式 C 代码,这些代码使用 typedef 关键字在头文件中定义类型 uint8_t、uint16_tuint32_t .

为了便于讨论,假设文件 typedefs.h 包含这些定义。

在我的新 C 源代码模块中,我包含了 stdint.h。我还包括其他头文件,其中包括层次结构中某处的 typedefs.h。正如预期的那样,编译器提示多个定义的符号。

我想修改遗留文件 typedefs.h 以便它只声明 uint*_t 类型,如果 stdint.h如果未定义 uint*_t 类型,则不包含或更好。

我的理解是 #ifndef 不能使用,因为 typedef 不是预处理器指令。

那么,如果 uint*_t 已经存在(或者如果 stdint.h 已经包含),我该如何告诉编译器不要定义它们?

注意:如果 C 规范定义的标准包括头文件的保护定义,这将很容易。

FWIW,我正在为 ARM9 处理器使用 Green Hills 编译器 4.24。

最佳答案

我相信 stdint.h 也应该为它定义的类型的限制定义一个宏。您应该能够测试那些使用 #ifdef 等的人。

#ifndef UINT32_MAX
typdef ... uint32_t;
#define UINT32_MAX ...
...
#endif

编辑:最初使用 UINT32_MIN,但正如 Jens Gustedt 指出的那样,这是一种不会出现的有符号/无符号和最小值/最大值的组合。

关于编译时检查 stdint.h 是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com