Можно ли вызывать макросы, подобные функциям, с меньшими параметрами в Linux? На самом деле это только генерирует предупреждение в Visual Studio (предупреждение 4003), а неназначенные переменные заменяются на "".
Но компиляция его с помощью g++ выдает ошибку в linux ("ошибка: макрос *** требует ** аргументов, но задано только **").
Есть ли способ отключить это или преодолеть это?
Ответ 1 · рейтинг 3 · James McNellis
Количество аргументов в вызове макроса должно точно соответствовать количеству параметров в определении макроса. Итак, нет, вы не можете вызвать макрос с меньшим количеством аргументов, чем у него есть параметров.
Чтобы "преодолеть" это, вы можете определить несколько макросов с разными именами и с разным количеством параметров.
C++0x (который еще не является стандартным, но может частично поддерживаться вашим компилятором) добавляет поддержку макросов с переменным числом аргументов, которые можно вызывать с переменным числом аргументов.
Ответ 2 · рейтинг 2 · Matthew Flaschen
В стандарте (§16.3 - Замена макросов) ясно, что вы должны передать одинаковое количество аргументов:
"Если список идентификаторов в определении макроса не заканчивается многоточием, количество аргументов (включая аргументы, не состоящие из токенов предварительной обработки) в вызове функционального макроса должно равняться количеству параметров в определении макроса. ."
Я не знаю ни одного варианта g++, чтобы переопределить это.