我正在尝试定义一个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 }
最多是数组的初始化列表,但取决于使用它的上下文,可能还有其他语法构造。无论如何,固有地没有数组。您不能从中提取一个元素。
我建议您将所有宏替换为实际的数组/元组/向量,可能是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
的特定要求的变体。
如果有其他方法可以解决问题,则应避免使用宏。