2014-11-02 4 views
6

Я использую макрос, определенный в том же исходном файле:Компилятор жалуется на необъявленную переменную в макро

#define MY_MACRO (a, b,...) (...) 

Макрос используется далее в этом файле.

Однако компилятор жалуется:

Ошибка: необъявленная (первое использование в этой функции).

Это действительно странно .. я пропустил что-то очевидное?

+3

Пожалуйста, покажите минимальный пример. – 2501

+3

Если вам нужен макрос функции, скобки для списка аргументов должны немедленно следовать за именем макроса, без пробела. Как и вы, вы определили простую подстановку, где 'MY_MACRO' расширена до' (a, b, ...) (...) ', которая может быть не такой, какой вы хотите. Возможно, вы можете запустить компилятор с помощью переключателя ('-E' в gcc), чтобы показать предварительно обработанный вывод, чтобы помочь вам отслеживать такие проблемы. –

+0

@MOehm: это было! Спасибо! – Iceman

ответ

12

Я думаю, что проблема заключается в том, что есть пробел между MY_MACRO и (a, b, ...). Это должно быть так:

#define MY_MACRO(a, b,...) (...) 
5

Удалите пробел между именем макроса и списком аргументов. Пространство отделяет головку макроса от тела, поэтому оно рассматривается как макрос без аргументов, который расширяется в список желаемых аргументов, за которым следует желаемое тело.

Смежные вопросы