如何编写与编译器无关的泛型代码



在我的工作中,我为许多平台(Windows,嵌入式微控制器,Arduino等(使用许多不同的编译器。现在我想编写一个应该适用于所有它们的通用例程,但我遇到了数据类型冲突。它主要是低级的东西,所以我想使用"字节"、"单词"、"布尔"等类型。

对于某些

编译器,这些类型尚未定义,但对于某些编译器,它们已定义,在这些情况下,将导致冲突类型的错误。

我了解到 typedef 高于 #define。在这个问题上,很明显没有办法制作条件类型定义。

我已经想到使用独特的类型,例如:

typedef unsigned char mybyte
typedef unsigned short int myword
etc...

但这会使我的源代码看起来非常丑陋恕我直言。

所有平台都应该支持bool,因为它是 C++ 中内置类型的保留关键字。

我所知道的唯一一个byteword的平台是Arduino。它们只是分别uint8_tunsigned int的类型定义别名。(来源(

如果你有现有的使用byteword的Arduino代码,最简单的解决方案是检查你的代码是否在Arduino环境中运行,如果不是这种情况,则自己定义Arduino类型:

#ifdef ARDUINO
#include <Arduino.h>
#else
#include <cstdint>
typedef uint16_t word; // or unsigned int, depending on your needs
typedef uint8_t byte;
#endif

但是,我的首选解决方案是在需要特定位数的位时直接使用 stdint.h 的标准整数。使用byteword只会增加混乱,因为它是非标准的。 uint16_t确切地告诉你它是什么,你确切地知道最大可能的值是什么,以及它是否被签名。

最新更新