如何访问宏中定义的数组元素
How to Access an Array Element Defined in a Macro
我正在尝试定义一个 C++ 头文件来访问在宏中定义的数组元素。
数组定义为:
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
我正在尝试像这样访问它,以获得第一个元素:
#define Z_STEPPER_ALIGN_XY { { NOZZLE_TO_PROBE_OFFSET[0] , Y_BED_SIZE/2 }, { X_BED_SIZE, Y_BED_SIZE/2 } }
但我收到以下错误:
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 } }
~ ^
我在记住我的宏扩展规则时遇到了麻烦,而且似乎也无法召唤正确的 google 术语来帮助解决这个问题。该消息是有道理的,但我不确定要尝试使用什么替代方法来表示数组访问。我想我希望预处理器做的是嵌入数组文字,然后是访问,这样输出就会扩展到类似 { 27, 35, -1.5 }[0]
我感谢对这个公认的 n00by 问题的反馈!
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
不是数组。宏只做文本替换, { 27, 35, -1.5 }
最多是数组的初始化列表,但可能是任何其他语法构造,具体取决于使用它的上下文。无论如何,它本身就没有数组。您不能从中提取一个元素。
我建议您将所有宏替换为实际的 arrays/tuples/vectors,可能 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 };
或满足您对 NOZZLE_TO_PROBE_OFFSET
.
的特定要求的任何变体
如果有其他方法可以解决问题,则应尽量避免使用宏。
我正在尝试定义一个 C++ 头文件来访问在宏中定义的数组元素。
数组定义为:
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
我正在尝试像这样访问它,以获得第一个元素:
#define Z_STEPPER_ALIGN_XY { { NOZZLE_TO_PROBE_OFFSET[0] , Y_BED_SIZE/2 }, { X_BED_SIZE, Y_BED_SIZE/2 } }
但我收到以下错误:
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 } }
~ ^
我在记住我的宏扩展规则时遇到了麻烦,而且似乎也无法召唤正确的 google 术语来帮助解决这个问题。该消息是有道理的,但我不确定要尝试使用什么替代方法来表示数组访问。我想我希望预处理器做的是嵌入数组文字,然后是访问,这样输出就会扩展到类似 { 27, 35, -1.5 }[0]
我感谢对这个公认的 n00by 问题的反馈!
#define NOZZLE_TO_PROBE_OFFSET { 27, 35, -1.5 }
不是数组。宏只做文本替换, { 27, 35, -1.5 }
最多是数组的初始化列表,但可能是任何其他语法构造,具体取决于使用它的上下文。无论如何,它本身就没有数组。您不能从中提取一个元素。
我建议您将所有宏替换为实际的 arrays/tuples/vectors,可能 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 };
或满足您对 NOZZLE_TO_PROBE_OFFSET
.
如果有其他方法可以解决问题,则应尽量避免使用宏。