У меня есть код, который компилируется и в gcc и в vc ++. Код имеет общий макрос, который называют в двух сценариях.
Пример такого кода:
#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'
Как я могу удалить это предупреждение и все же получить ожидаемый вывод?
Спасибо.
Это может сработать в зависимости от вашей версии VC ++ и т. Д.
#define B(...) A1##__VA_ARGS__
Я не знаю, понравятся ли vc ++ пустые аргументы va, но стоит попробовать - дайте мне знать, если это сработает :)
Для 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 и подавить предупреждение (если есть какой-либо другой способ).