Как преодолеть предупреждение vc ++ C4003 при написании общего кода для gcc и vc ++ - PullRequest
5 голосов
/ 03 марта 2010

У меня есть код, который скомпилирован в gcc и vc ++. В коде есть общий макрос, который вызывается в двух сценариях.

  1. Когда мы передаем ему некоторые параметры.
  2. Когда мы не хотим передавать ему какие-либо параметры.

Пример такого кода:

#define B(X) A1##X

int main() {
        int B(123), B();

        return 0;
}

Ожидаемый результат на этапе предварительной обработки компиляции:

int main() {
        int A1123, A1;

        return 0;
}

Вывод для gcc и vc ++ соответствует ожиданиям, но vc ++ выдает предупреждение:

warning C4003: not enough actual parameters for macro 'B'

Как я могу удалить это предупреждение и получить ожидаемый результат?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 марта 2010

Это может работать в зависимости от версии VC ++ и т. Д.

#define B(...)  A1##__VA_ARGS__

Я не знаю, понравится ли vc ++ пустой аргумент va, но его стоит попробовать - дайте мне знать, если это сработает:)

1 голос
/ 11 марта 2010

Для Visual C ++ вам нужно использовать директиву # pragma warning . Вы получаете предупреждение C4003 (C => Compiler), 4003 => номер предупреждения.

#pragma warning (disable: 4003)

#define B(X) A1##X

int main() {
        int B(123), B();

        return 0;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...