Я написал следующий макрос:
#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, который использует квадратные скобки.Измените
на
И это должно работать.
У вас не может быть такого макроса, который будет расширяться, если вы предоставите аргументы в квадратных скобках. Везде, где у вас появилась идея, что макросы являются умными инструментами для замены текста, все наоборот: макросы чрезвычайно тупые и глупые механизм замещения текста. То, что вы пытаетесь сделать с макросом, абсолютно неоправданно - просто напишите именованную функцию.