Вызов макроса C ++ с меньшим количеством аргументов - PullRequest
1 голос
/ 21 июля 2010

Можно ли вызывать макросы-функции с меньшим количеством параметров в linux?На самом деле выполнение этого только генерирует предупреждение в Visual Studio (предупреждение 4003), а неназначенные переменные заменяются на «».

Но компиляция с использованием g ++ приводит к ошибке в linux («error: macro *** требует ** аргументы», но только ** дано ").

Есть ли какой-нибудь возможный способ отключить или преодолеть это?

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Стандарт (§16.3 - замена макроса) ясно, что вы должны передать одинаковое количество аргументов:

"Если список идентификаторов в определении макроса не заканчивается многоточиемчисло аргументов (включая аргументы, состоящие из токенов предварительной обработки) при вызове функционально-подобного макроса должно равняться числу параметров в определении макроса. "

Я не знаюлюбой опции g ++, чтобы переопределить это.

2 голосов
/ 21 июля 2010

Количество аргументов в вызове макроса должно точно соответствовать количеству параметров в определении макроса.Таким образом, нет, вы не можете вызвать макрос с меньшим количеством аргументов, чем у него есть параметры.

Чтобы «преодолеть» его, вы можете определить несколько макросов с разными именами с различным количеством параметров.+ 0x (который еще не является стандартным, но который может частично поддерживать ваш компилятор) добавляет поддержку макроса с переменным числом аргументов, который можно вызывать с переменным числом аргументов.

...