Comments 14
Коротких путей нет — хотите сделать код стабильнее — вычитайте все предупреждения и исправьте код.
Некоторые компиляторы умеют отключать предупреждения для библиотечных хедеров.
Да не некоторые, а, пожалуй, почти все. Только делается это не стандартно. Ну и чуточку более корректно: они могут отключать предупреждения для участков кода, соответственно заголовочник библиотеки подключается, в наиболее удобном варианте, через враппер. Например, мой libusb_wrapper.h
для gcc:
#pragma once
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#include <libusb.h>
#pragma GCC diagnostic pop
А быть может, достаточно просто использовать возможности компилятора Visual C++ (или FxCop)? Нет, не достаточно: Демонстрация возможностей анализатора PVS-Studio на примере открытых проектов компании Microsoft.
Тема — прописная истина. Что не мешает ей быть чертовски актуальной. С другой стороны, в коде без ворнингов можно использовать следующий трюк: все знают, что временами код обрастает всякими TODO/FIXME и так далее, и живут они потом там вечно. А если вместо TODO вставить:
#warning TODO: remove this ugly comment
то при отсутствии других ворнингов это будет назойливо мозолить глаза и шансов на выпил причин данного TODO будет больше.
Здесь ключевое слово -Werror. А если…
Это аналог #pragma, но его можно использовать в макросах.
Т.е. можно объявить свою прагму, которая будет на пример работать только для clang, а gcc её будет игнорировать.
Примерно так:
#ifdef __clang__
#define PRAGMACLANG(str) _Pragma(#str)
#else
#define PRAGMACLANG(str)
#endif
И теперь в коде для заглушения какого-то предупреждения clang, можно написать:
PRAGMACLANG(clang diagnostic push)
PRAGMACLANG(clang diagnostic ignored "-Wsomething"
… здесь какой-то код…
PRAGMACLANG(clang diagnostic pop)
Также можно учитывать версию компиляторов, включенный стандарт C/C++ кода и т.д.
Предупреждения компилятора в С++: принять нельзя отказать