管理来自多个供应商的冗余typedef

Jon*_*Jon 7 c embedded middleware typedef

在C编程语言中,管理用于与多个中间件(操作系统,协议栈)供应商的平台无关的冗余typedef的最佳方法是什么?

例如:
target.h

/* inclusion lock etc */
typedef char CHAR;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
/* ... more of the same ... */
Run Code Online (Sandbox Code Playgroud)

OS_types.h

/* inclusion lock etc */
typedef char CHAR;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
/* ... more of the same ... */
Run Code Online (Sandbox Code Playgroud)

在某些时候,编译器会识别出它有两个冗余的typedef符号并且出现错误,因为C中的定义根本不允许这样做.

小智 6

在不修改供应商头部的情况下执行此操作的一种可能方法是将预处理器与一些头包装器一起使用,例如

mytypes.h

#define BYTE VENDOR1_BYTE
#include <vendor1/types.h>
#undef BYTE

#define BYTE VENDOR2_BYTE
#include <vendor2/types.h>
#undef BYTE

typedef unsigned char BYTE;
Run Code Online (Sandbox Code Playgroud)

这将导致供应商的代码生成不同的typedef,但希望映射到相同的实际类型(示例中的unsigned char).如果供应商对相同的类型名称使用不同的基础类型,则该方法可能不起作用.


Ste*_*son 2

那是个硬汉。如果我必须做点什么,我可能会捂住鼻子修改第三方头文件——可能使用宏来获得有问题的 typedef 的条件编译。

祝你好运。