我寫了下面的宏:C錯誤:宏名稱後缺少空格
#define m[a,b] m.values[m.rows*(a)+(b)]
然而gcc給我這個錯誤:
error: missing whitespace after the macro name
有什麼問題,我該如何解決?
我寫了下面的宏:C錯誤:宏名稱後缺少空格
#define m[a,b] m.values[m.rows*(a)+(b)]
然而gcc給我這個錯誤:
error: missing whitespace after the macro name
有什麼問題,我該如何解決?
不能使用[
和]
作爲分隔符宏參數;您必須使用(
和)
。試試這個:
#define m(a,b) m.values[m.rows*(a)+(b)]
但是請注意,將宏的名稱定義爲現有變量的名稱可能會造成混淆。你應該避免這樣的陰影名字。
我不熟悉與使用方括號的任何C預處理器語法。更改
#define m[a,b] m.values[m.rows*(a)+(b)]
到
#define m(a,b) m.values[m.rows*(a)+(b)]
,它應該工作。
他其實應該用這樣的: '#定義ELEM(矩陣,行,列)matrix.values [matrix.rows *(row)+ column]' – Spidey
你不能有這樣一個宏,當你在方括號提供參數,將擴大。無論你在哪裏得到的想法,宏是一個智能文本替換工具,它只是反過來:宏是非常遲鈍和愚蠢文本的替代機制。你想用宏做什麼是絕對沒有根據的 - 只需編寫一個命名函數即可。
我的目標是能夠創建一個矩陣myMat,並用myMat [I,J]接入元件。我猜這不行。如果您正在使用C++,你可以覆蓋索引做的正是這一點) – Hannesh
;我會在期限過後接受。 C沒有什麼直接的可比性。 – cdhowie
我知道,我來自C++和C#,我習慣於這一點。我希望能夠以某種方式扭轉C預處理器,讓我得到同樣的東西。 – Hannesh