Стандарты программирования на С++. 101 правило и рекомендация | страница 9



Примеры

Пример 1. Заголовочный файл стороннего производителя. Библиотечный заголовочный файл, который вы не можете изменить, может содержать конструкцию, которая приводит к (вероятно, мелкому) предупреждению. В таком случае "заверните" этот файл в свой собственный, который будет включать исходный при помощи директивы >#include и избирательно отключать для него конкретные предупреждения. В своем проекте вы будете использовать собственный заголовочный файл, а не исходный. Например (учтите — управление выводом предупреждений варьируется от компилятора к компилятору):

>// Файл: myproj/my_lambda.h - "обертка" для lambda.hpp из

>// библиотеки Boost. Всегда включайте именно этот файл и не

>// используйте lambda.hpp непосредственно. Boost.Lambda

>// приводит к выводу компилятором предупреждений, о

>// безвредности которых нам доподлинно известно, когда

>// разработчики сделают новую версию, которая не будет

>// вызывать предупреждений, мы удалим из этого файла

>// соответствующие директивы #pragma, но сам заголовочный

>// файл останется.

>//

>#pragma warning(push) // Отключение предупреждений только

>// для данного заголовочного файла

>#pragma warning(disable:4512)

>#pragma warning(disable:4180)

>#include

>#pragma warning(pop) // Восстанавливаем исходный уровень

>// вывода предупреждений

Пример 2. "Неиспользуемый параметр функции". Убедитесь, что вы в самом деле сознательно не используете параметр функции (Например, это "заглушка" для будущего расширения или требуемая стандартом часть сигнатуры, которую ваш код не использует). Если этот параметр вам действительно не нужен, просто удалите его имя:

>// ... внутри пользовательского распределителя подсказка не

>// используется …


>// Предупреждение: "неиспользуемый параметр 'localityHint'"

>pointer allocate(size_type numObjects,

> const void *localityHint = 0) {

> return static_cast(

>  mallocShared(numObjects * sizeof(T)));

>}


>// новая версия: предупреждение устранено

>pointer allocate(size_type numObjects,

> const void* /* localityHint */ = 0) {

> return static_cast(

>  mallocShared(numObjects * sizeof(T)));

>}

Пример 3. "Переменная определена, но не используется". Убедитесь, что вы действительно не намерены обращаться к данной переменной (к таким предупреждениям часто приводят локальные объекты, следующие идиоме "выделение ресурса есть инициализация", см. рекомендацию 13). Если обращение к объекту действительно не требуется, часто можно заставить компилятор замолчать, включив "вычисление" самой переменной в качестве выражения (такое вычисление не влияет на скорость работы программы):