C错误:宏名称后缺少空格

时间:2011-09-06 14:32:41

标签: c macros c-preprocessor

我写了以下宏:

#define m[a,b] m.values[m.rows*(a)+(b)]

然而gcc给了我这个错误:

error: missing whitespace after the macro name

有什么问题,我该如何解决?

3 个答案:

答案 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)

当您在括号中提供参数时,您不能拥有会扩展的宏。无论你认为宏是一个 智能 文本替换工具,它只是反过来说:宏非常 钝和愚蠢 文本替换机制。你试图用宏做什么是绝对没有根据的 - 只需编写一个命名函数。