2011-09-06 45 views
3

我寫了下面的宏:C錯誤:宏名稱後缺少空格

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

然而gcc給我這個錯誤:

error: missing whitespace after the macro name 

有什麼問題,我該如何解決?

回答

7

不能使用[]作爲分隔符宏參數;您必須使用()。試試這個:

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

但是請注意,將宏的名稱定義爲現有變量的名稱可能會造成混淆。你應該避免這樣的陰影名字。

+0

我的目標是能夠創建一個矩陣myMat,並用myMat [I,J]接入元件。我猜這不行。如果您正在使用C++,你可以覆蓋索引做的正是這一點) – Hannesh

+0

;我會在期限過後接受。 C沒有什麼直接的可比性。 – cdhowie

+0

我知道,我來自C++和C#,我習慣於這一點。我希望能夠以某種方式扭轉C預處理器,讓我得到同樣的東西。 – Hannesh

4

我不熟悉與使用方括號的任何C預處理器語法。更改

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

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

,它應該工作。

+1

他其實應該用這樣的: '#定義ELEM(矩陣,行,列)matrix.values [matrix.rows *(row)+ column]' – Spidey

1

你不能有這樣一個宏,當你在方括號提供參數,將擴大。無論你在哪裏得到的想法,宏是一個智能文本替換工具,它只是反過來:宏是非常遲鈍和愚蠢文本的替代機制。你想用宏做什麼是絕對沒有根據的 - 只需編寫一個命名函數即可。