预处理器/条件变量定义
Preprocessor / conditional variable definition
以下代码在Arduino和Raspberry上编译:
#if defined(ARDUINO)
const Channel channel1{1,uint64_t(0xF0F0F0F0A2LL),uint64_t(0xF0F0F0F0A1LL)};
const Channel channel2{2,uint64_t(0xF0F0F0F0B2LL),uint64_t(0xF0F0F0F0B1LL)};
#else
const Channel channel1{1,uint64_t(0xF0F0F0F0A1LL),uint64_t(0xF0F0F0F0A2LL)};
const Channel channel2{2,uint64_t(0xF0F0F0F0B1LL),uint64_t(0xF0F0F0F0B2LL)};
#endif
第二个参数是in Channel,第三个参数是out Channel。
在预处理器条件下,交换这些通道(管道RF24)。通信或多或少通过RX/TX运行(简化)。客户端的读取通道是服务器端的写入通道,反之亦然。
这使得在客户端和服务器端编写相同的代码成为可能,例如:
RF24Client client1(radio, channel1);
client1.enableReading();
...
client1.write(...)
最后,我的问题是:这是有效的,但我不确定这种"好风格"还是隐藏在预处理器表达式后面的垃圾。
我知道,我知道——通常你可以/应该用接口和堆上的指针/智能指针来解决这个问题。但是动态内存在那些小型设备上有点问题。。。
我会去掉重复,做得更像这样:
#if defined(ARDUINO)
#define K1 0xF0F0F0F0A2ULL
#define K2 0xF0F0F0F0A1ULL
#define K3 0xF0F0F0F0B2ULL
#define K4 0xF0F0F0F0B1ULL
#else
#define K1 0xF0F0F0F0A1ULL
#define K2 0xF0F0F0F0A2ULL
#define K3 0xF0F0F0F0B1ULL
#define K4 0xF0F0F0F0B2ULL
#endif
const Channel channel1{ 1, K1, K2 };
const Channel channel2{ 2, K3, K4 };
如果有某种模式的话,您也可以在一定程度上合并常量。
相关文章:
- 用C++中的一个变量定义一个常量
- 变量定义到C++布尔值转换
- 未声明的标识符错误,但变量定义正确 (?)
- C++多线程程序:变量定义为类成员的隔离错误
- 将变量定义为静态时,为什么可以多次定义它
- 初始值设定项列表与构造函数赋值与变量定义
- 如何根据传递给函数的变量定义特征矩阵大小
- C++ 描述如何使用来简化变量定义
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 是否修改其声明语句中的变量定义良好
- 使用类的其他成员变量定义类的成员变量数组
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 元组 std::get() 不适用于变量定义的常量
- 全局使用变量定义和C 声明
- C++变量定义中的易失性类型量词位置
- 将变量定义为数组和正确的语法
- 多个,包括具有变量定义的头文件
- 调用构造函数,并将成员作为参数解析为变量定义
- 逗号分隔变量定义中关系前的序列
- 如何使用命名变量定义常量右值引用参数的默认值