c++ - 如何编写通用的独立于编译器的代码?

标签 c++ c

在我的工作中,我使用许多平台(Windows、嵌入式微 Controller 、Arduino 等)的许多不同编译器。 现在我想编写一个适用于所有这些的通用例程,但我遇到了与数据类型的冲突。 它主要是低级的东西,所以我想使用“byte”、“word”、“bool”等类型。

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

我了解到 typedef 比 #define 更受欢迎。 而在 this question很明显,没有办法制作条件类型定义。

我已经考虑过使用独特的类型,例如:

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

但是恕我直言,这会使我的源代码看起来非常难看。

最佳答案

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

据我所知,唯一具有 byteword 的平台是 Arduino。它们分别只是 uint8_tunsigned int 的别名。 ( Source )

如果您现有的 Arduino 代码使用 byteword,最简单的解决方案是检查您的代码是否在 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 准确地告诉您它是什么,您准确地知道最大可能值是多少,以及它是否有符号。

关于c++ - 如何编写通用的独立于编译器的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664281/

相关文章:

C函数在不指定参数数据类型的情况下工作

c++ - 我很难调试较长的编译时间和多个用户输入要求

c++ - Travis CI 构建矩阵包含虚假条目?

python - C 中的 Numpy 数组

c - C 中的变量 auto

objective-c - Variadic Function 缓存上次调用的参数列表

c++ - 为什么 foo->bar->foobar 被认为是不好的风格?以及如何在不添加代码的情况下避免?

c++ - Qt 造物主 : Treat warnings as errors

c++ - 如何检查是否转换为 wchar_t "failed"

c++ - __try/__except block 或 try/catch block 哪个更好用?