подавить предупреждения на нескольких сборках компилятора

Есть ли общее предупреждение о подавлении, которое я могу использовать?

Проблема в том, что иногда я могу собрать, используя одну версию компилятора (gcc), и тогда у меня есть партнер, который использует некоторые общие вещи, но использует другой компилятор. Так что предупреждение # разные.

Единственный способ, которым я мог придумать, — это создать макрос, который был определен в файле, который я передал бы в некотором родовом значении:

SUPPRESS_WARNING_BEGIN(NEVER_USED)
//code
SUPPRESS_WARNING_END

тогда файл будет иметь что-то вроде:

#if COMPILER_A
NEVER_USED = 245
#endif

#if COMPILER_B
NEVER_USED = 332
#endif#define SUPPRESS_WARNING_BEGIN(x) /
#if COMPILER_A
//Compiler A suppress warning x
#endif

#if COMPILER_B
//Compiler B suppress warning x
#endif

#define SUPPRESS_WARNING_END /
#if COMPILER_A
// END Compiler A suppress warning
#endif

#if COMPILER_B
// END Compiler A suppress warning
#endif

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

Спасибо

1

Решение

Нет портативного способа сделать это. Разные компиляторы делают это по-разному (например, #pragma warning, #pragma GCC diagnostic, так далее.).

Самый простой и лучший способ сделать это — написать код, который не генерирует никаких предупреждений в компиляторе на любом уровне предупреждений.

Если вашей целью является подавление предупреждений о неиспользуемых переменных, я рекомендую использовать макрос:

#define UNUSED(x) ((void)sizeof(x))
...
void some_function(int x, int y)
{
// No warnings will be generated if x is otherwise unused
UNUSED(x);
....
}

sizeof Оператор оценивается во время компиляции, и приведение к void не дает результата, поэтому любой компилятор оптимизирует UNUSED заявление в ничто, кроме как рассмотреть операнд, который будет использоваться.

GCC также имеет unused attribute`:

// No warnings will be generated if x is otherwise unused
int x __attribute__((unused));
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]