我写了以下宏:
#define m[a,b] m.values[m.rows*(a)+(b)]
然而gcc给了我这个错误:
error: missing whitespace after the macro name
有什么问题,我该如何解决?
答案 0 :(得分:7)
您不能将[
和]
用作宏参数的分隔符;您必须使用(
和)
。试试这个:
#define m(a,b) m.values[m.rows*(a)+(b)]
但请注意,将宏的名称定义为现有变量的名称可能会造成混淆。你应该避免像这样遮蔽名字。
答案 1 :(得分:4)
我不熟悉使用方括号的任何C预处理器语法。变化
#define m[a,b] m.values[m.rows*(a)+(b)]
到
#define m(a,b) m.values[m.rows*(a)+(b)]
它应该有用。
答案 2 :(得分:1)
当您在方括号中提供参数时,您不能拥有会扩展的宏。无论你认为宏是一个 智能 文本替换工具,它只是反过来说:宏非常 钝和愚蠢 文本替换机制。你试图用宏做什么是绝对没有根据的 - 只需编写一个命名函数。