Как преодолеть vc ++ предупреждение C4003 при написании общего кода и для gcc и для vc ++

У меня есть код, который компилируется и в 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'

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

Спасибо.

5
задан compbugs 3 March 2010 в 11:52
поделиться

2 ответа

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

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

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

2
ответ дан 15 December 2019 в 06:24
поделиться

Для 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 и подавить предупреждение (если есть какой-либо другой способ).

1
ответ дан 15 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: