Правильно ли использовать #pragma warning push / pop для временного изменения уровня предупреждения?

Иногда бывает трудно написать код C ++, который бы вообще не выдавал предупреждения. Однако включение предупреждений - хорошая идея. Поэтому часто бывает необходимо отключить предупреждения вокруг определенной конструкции и включить их во всех других частях кода.

Я видел два способа сделать это до сих пор.

Первый - использовать #pragma warning (push) и #pragma warning (pop) :

 #pragma warning( push )
 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( pop )

Второй - использовать #pragma warning (по умолчанию) :

 #pragma warning( disable: ThatWarning )
 //code with ThatWarning here
 #pragma warning( default: ThatWarning )

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

Первый подход выглядит чистым. Есть ли с этим проблемы? Есть ли лучшие способы добиться того же?

70
задан Steve Townsend 16 November 2010 в 13:11
поделиться