在我的工作中,我使用许多平台(Windows、嵌入式微 Controller 、Arduino 等)的许多不同编译器。 现在我想编写一个适用于所有这些的通用例程,但我遇到了与数据类型的冲突。 它主要是低级的东西,所以我想使用“byte”、“word”、“bool”等类型。
对于某些编译器而言,这些类型尚未定义,但对于某些编译器而言,它们是在这些情况下会导致类型冲突的错误。
我了解到 typedef 比 #define 更受欢迎。 而在 this question很明显,没有办法制作条件类型定义。
我已经考虑过使用独特的类型,例如:
typedef unsigned char mybyte
typedef unsigned short int myword
etc...
但是恕我直言,这会使我的源代码看起来非常难看。
最佳答案
所有平台都应该支持 bool
,因为它是 C++ 中内置类型的保留关键字。
据我所知,唯一具有 byte
和 word
的平台是 Arduino。它们分别只是 uint8_t
和 unsigned int
的别名。 ( Source )
如果您现有的 Arduino 代码使用 byte
和 word
,最简单的解决方案是检查您的代码是否在 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
的标准整数。使用 byte
和 word
只会增加困惑,因为它是非标准的。 uint16_t
准确地告诉您它是什么,您准确地知道最大可能值是多少,以及它是否有符号。
关于c++ - 如何编写通用的独立于编译器的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664281/