Есть ли общее предупреждение о подавлении, которое я могу использовать?
Проблема в том, что иногда я могу собрать, используя одну версию компилятора (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
Не знаете, есть ли более простой способ? Кроме того, я знаю, что в идеале мы все будем использовать один и тот же компилятор, но это, к сожалению, не вариант. Просто пытаюсь найти наименее сложный способ поддержки чего-то подобного, и я надеюсь, что есть более простой способ, чем упомянутый выше.
Спасибо
Нет портативного способа сделать это. Разные компиляторы делают это по-разному (например, #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));
Других решений пока нет …