Ошибка C: пропущены пробелы после имени макроса - PullRequest
3 голосов
/ 06 сентября 2011

Я написал следующий макрос:

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

Однако gcc выдает мне эту ошибку:

error: missing whitespace after the macro name

Что не так и как я могу это исправить?

Ответы [ 3 ]

7 голосов
/ 06 сентября 2011

Вы не можете использовать [ и ] в качестве разделителей для аргументов макроса; Вы должны использовать ( и ). Попробуйте это:

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

Но учтите, что определение имени макроса в качестве имени существующей переменной может сбивать с толку. Вам следует избегать дублирования имен, подобных этому.

4 голосов
/ 06 сентября 2011

Я не знаком ни с одним синтаксисом препроцессора C, который использует квадратные скобки.Измените

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

на

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

И это должно работать.

1 голос
/ 06 сентября 2011

У вас не может быть такого макроса, который будет расширяться, если вы предоставите аргументы в квадратных скобках. Везде, где у вас появилась идея, что макросы являются умными инструментами для замены текста, все наоборот: макросы чрезвычайно тупые и глупые механизм замещения текста. То, что вы пытаетесь сделать с макросом, абсолютно неоправданно - просто напишите именованную функцию.

...