Ed *_*wey 0 c++ macros preprocessor
我正在尝试定义一个 C++ 头文件,该文件访问宏中定义的数组元素。
数组定义为:
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
Run Code Online (Sandbox Code Playgroud)
我试图像这样访问它,以获得第一个元素:
#define Z_STEPPER_ALIGN_XY { { NOZZLE_TO_PROBE_OFFSET[0] , Y_BED_SIZE/2 }, { X_BED_SIZE, Y_BED_SIZE/2 } }
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
Marlin/src/gcode/calibrate/../../inc/../../Configuration_adv.h:659:57: error: expected '}' before '[' token
#define Z_STEPPER_ALIGN_XY { { NOZZLE_TO_PROBE_OFFSET[0] , Y_BED_SIZE/2 }, { X_BED_SIZE, Y_BED_SIZE/2 } }
~ ^
Run Code Online (Sandbox Code Playgroud)
我无法记住我的宏扩展规则,而且似乎也无法找到正确的谷歌术语来帮助解决这个问题。该消息是有道理的,但我不确定该尝试什么作为表示数组访问的替代方法。我想我想让预处理器做的是嵌入数组文字,然后是访问,这样输出就会扩展到{ 27, 35, -1.5 }[0]我很欣赏这个公认的 n00by 问题的反馈!
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
Run Code Online (Sandbox Code Playgroud)
不是数组。宏只进行文本替换和{ 27, 35, -1.5 },最多是数组的初始化列表,但可能是其他语法结构,具体取决于使用它的上下文。在任何情况下,它本质上都没有数组。你不能从中提取一个元素。
我建议你用实际的数组/元组/向量替换所有的宏,可能const或constexpr限定,例如:
auto NOZZLE_TO_PROBE_OFFSET = std::array<double, 3>{ 27., 35., -1.5 };
// or since C++17
auto NOZZLE_TO_PROBE_OFFSET = std::array{ 27., 35., -1.5 };
Run Code Online (Sandbox Code Playgroud)
或任何变体满足您对NOZZLE_TO_PROBE_OFFSET.
如果有其他解决问题的方法,则应尽量避免使用宏。
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |