Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Вызов макроса C++ с меньшим количеством аргументов

Автор вопроса: MBZОтветов: 2

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

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

Есть ли способ отключить это или преодолеть это?

  • Если вы используете C++, вы должны использовать встроенные функции вместо макросов. Фактически, в C++ вам следует избегать использования препроцессора, насколько это возможно. Dima 21.07.2010
  • Ага... если вы используете их для чего угодно, кроме охранников, вы макробатор. ;-) Amardeep AC9MF 21.07.2010
  • В C++ все еще есть несколько ситуаций, когда директивы препроцессора и/или макросы являются единственным решением, например код-оболочка, который должен быть включен в отладочные сборки, но вообще не компилируется в выпускных сборках. Но да, вообще их следует избегать. Tyler McHenry 21.07.2010

c++g++macrosc-preprocessor

Ответы

Ответ 1 · рейтинг 3 · James McNellis

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

Чтобы "преодолеть" это, вы можете определить несколько макросов с разными именами и с разным количеством параметров.

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

Ответ 2 · рейтинг 2 · Matthew Flaschen

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы