Как "подавить" выдачу конкретных варнингов в конкретных мест

  • Автор темы ДокторТуамОсес2
  • Дата начала
Д

ДокторТуамОсес2

Не хочу, чтобы выдавались конкретные варнинги, относящиеся к определённым областям заданных файлов.

Как это сделать?

Про "Warning Level" в настройках студии я в курсе.

Но мне нужно подавить варнинг с конкретным номером (К примеру, C4244). И только в определённых местах заданных файлов. В том числе в системных файлах библиотек компилятора.

Можно это как-либо сделать?
...
Да.Компилятор Microsoft Visual C++ 6.0 (MSVC++ 6.0)
 
Д

ДокторТуамОсес2

Почитал. Вот ответ:

Код:
#pragma warning(push)
#pragma warning(disable:4700 4785)
//в этом регионе кода варнинги 4700 и 4785 отключены
....
#pragma warning(pop)
//восстановили исходное состояние варнингов 4700 и 4785 
// (возможно они и до входа в наш участок были отключены)
// тогда их состояние после команды #pragma warning(pop) не изменится
 
Д

ДокторТуамОсес2

Почему в нижеприведённой программе не подавляется печать варнинга C4700?
А как его можно подавить?

Код:
#include <iostream>
using namespace std;

int main ()
{
int		int_A , int_B;

#pragma warning ( disable: 4700 )	// warning C4700 должен быть подавлен

int_A = int_B; 					// warning C4700: local variable 'int_B'
// used without having been initialized
cout << "main running " << endl;
return 0;

}
 
E

European

Предупреждения надо исправлять, а не подавлять. Попробуйте еще на десятке программерских форумов свою проблему расписать, может будет быстрее, чем открыть MSDN и почитать.
 
Д

ДокторТуамОсес2

N

Neutrino

Почему в нижеприведённой программе не подавляется печать варнинга C4700?
А как его можно подавить?

#include <iostream>
using namespace std;

int main ()
{
int int_A , int_B;

#pragma warning ( disable: 4700 ) // warning C4700 должен быть подавлен

int_A = int_B; // warning C4700: local variable 'int_B'
// used without having been initialized
cout << "main running " << endl;
return 0;

}

MSDN сказал(а):
For warning numbers greater than 4699, those associated with code generation, the warning pragma has effect only when placed outside function definitions. The pragma is ignored if it specifies a number greater than 4699 and is used inside a function. The following example shows the correct placement of warning pragmas to disable, and then restore, the generation of a code-generation warning message:
int a;
#pragma warning( disable : 4705 )
void func()
{
a;
}
#pragma warning( default : 4705 )
 
A

alexsid

переменные проинициализируй, можно также снизить уровень варнингов в настройках проекта

Наскока помню , подавлять варнинги в теле функции низя...
 
D

DSDante

Если очень нужно подавить предупреждения в одном файле, то можно кликнуть по файлу правой кнопкой -> Properties -> C/C++ -> Advanced -> Disable Specific warnings (так, по крайней мере, в VC 2008).
Конечно, лучше объявлять с инициализацией: int int_A, int_B=0;
А еще лучше переписать программу так, чтобы не копировать мусор, который содержался в переменных (он не годится даже как генератор случайных чисел).
Это не ошибки стандартных библиотек, просто они создаются не для хаков (в изначальном значении слова), а для легко читаемого, поддерживаемого и расширяемого кода.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!