包括数据类型之间的斗争
Include fight between data types
很抱歉标题不好,我会尝试更好地描述我的问题。
我使用实时操作系统。由于我的任务是测试新功能,而我们的主要RTOS尚不支持它,因此我将基于另一个(直到现在尚未使用(RTOS制作原型。 这个新的RTOS带来了自己的头文件,它托管了许多typedefs来生成缩写,如ULONG,BOOL,INT等。
在我们的代码库中,有一些 typedef 可以保证,例如,一个无符号的长整型正好是 4 个字节。根据我们的样式指南,这些新类型将用于我们生产的任何界面。
不幸的是,这些typedefs与新RTOS(ULONG,INT,BOOL,...(的名称相同。
例如,破坏构建的事情是,例如,BOOL曾经被声明为无符号char,一次被声明为int.
这会导致使用BOOL和其他不同类型的某些函数标头损坏。
我的问题是,我怎样才能使这两个中的一个成为"主"标头,从而更喜欢它的 typedefs 而不是另一个头文件的 typedefs?
您还认为还有哪些其他方法可以划分这两个标头?
由于我只在新的RTOS上实现了原型,因此更改基本类型被视为不太受欢迎的解决方案。 任何帮助,感谢您,如果您需要进一步澄清,请告诉我!
编辑:好的,这里有一些代码可以进一步澄清:
RTOS_typedefs.h
...
typedef void VOID;
typedef unsigned char BOOL;
typedef int INT;
...
ownCodeBase_typedefs.h
...
#define void VOID
typedef int BOOL;
typedef int INT;
现在如您所见,INT typedef 是相同的,不会造成麻烦。
在某些文件中,Void 定义与 void typedef 发生冲突,预处理器生成以下内容:
typedef void void;
。这将生成编译器错误。
Bool typedef 破坏了我的函数头,因为在一个文件中使用了 RTOS 版本,而在另一个文件中使用了我们代码库中的 typedef。编译器生成两个不同的签名,链接器找不到其中一个签名的定义。->抛出另一个错误
使用一些预处理器(ab(使用手动覆盖typedefs是一个选项。
/* Rename the OS version of 'BOOL' to something else */
#define BOOL osBOOL
#include <osheader>
#undef BOOL
/* When myheader.h is included, BOOL is still free to be typedef'd'. */
#include myheader.h
手动覆盖将防止 RTOS 覆盖应用程序中 BOOL 的含义。它的 typedef bool 将改为 typedefosBOOL
并且BOOL
的任何内部使用都将替换为osBOOL
。
对要覆盖现有操作系统定义的标头类型的任何其他原始缩写重复该范例。
请注意,也可以反其道而行之。如果您有一个包含在所有项目文件中的常规标头,则可以在包含其标头后将宏BOOL
#define
到 RTOS未保留的内容。然后当你运行typedef BOOL char
预处理器将首先将BOOL
转换为myBOOL
,以及在包括标头在内的代码文件中使用它的每次使用。
另请参阅此问题以获取一些相关想法。
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++游戏中与库存系统作斗争
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 包括数据类型之间的斗争