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

Han*_*esh 4 c macros c-preprocessor

我写了以下宏:

#define m[a,b] m.values[m.rows*(a)+(b)]
Run Code Online (Sandbox Code Playgroud)

但是gcc给了我这个错误:

error: missing whitespace after the macro name
Run Code Online (Sandbox Code Playgroud)

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

cdh*_*wie 8

你不能使用[]作为宏参数的分隔符; 你必须使用().试试这个:

#define m(a,b) m.values[m.rows*(a)+(b)]
Run Code Online (Sandbox Code Playgroud)

但请注意,将宏的名称定义为现有变量的名称可能会令人困惑.你应该避免像这样遮蔽名字.


Dou*_* T. 5

我不熟悉使用方括号的C预处理程序语法。更改

  #define m[a,b] m.values[m.rows*(a)+(b)]
Run Code Online (Sandbox Code Playgroud)

  #define m(a,b) m.values[m.rows*(a)+(b)]
Run Code Online (Sandbox Code Playgroud)

它应该工作。

  • 他实际上应该使用这样的东西:`#define elem(matrix,row,column)matrix.values [matrix.rows *(row)+ column]` (2认同)