Visual Studio 컴파일러 경고 무시하기

이번 글에서는 Visual Studio에서 불필요한 경고를 무시하는 방법에 대해 알아보겠습니다. Visual Studio 2013을 기준으로 작성되었습니다.

아래 코드를 빌드하면 C4351 경고가 나옵니다. 이 경고는 생성자에서 배열을 초기화 할 경우 과거 컴파일러와 다르게 배열 요소들이 0으로 초기화가 잘 된다는(?) 경고입니다. 즉 별 쓸모 없는 경고이므로 이 경고를 무시하는 방법을 알아보겠습니다.

class Test
{
	int m_ints[10];
	double m_doubles[10];

public:
	Test()
		: m_ints() // C4351
		, m_doubles() // C4351
	{
	}
};

프로젝트 속성에서 경고 무시하기

프로젝트 속성 창을 엽니다.

C/C++ -> Advanced -> Disable Specific Warnings로 가서 경고 번호를 적어줍니다. 여러게 적을 경우 세미콜론(;)으로 구분해줍니다. OK를 클릭하고 다시 빌드하면 더 이상 경고가 나오지 않습니다.

#pragam 키워드로 경고 무시하기

경고가 나오는 소스 파일 상단에 #pragma warning(disable: 4351) 입력해줍니다. #pragma 키워드 이 후에 나오는 경고는 모두 무시 됩니다.

#pragma warning(disable: 4351)

class Test
{
	int m_ints[10];
	double m_doubles[10];

public:
	Test()
		: m_ints() // C4351
		, m_doubles() // C4351
	{
	}
};

#pragam 키워드를 사용하여 소스 파일내 일부 경고만 무시하기

경고를 무시하고 싶은 영역 상단에 #pragma warning(push)를 입력하고 하단에 #pragma warning(pop)를 입력하고 그 사이에 무시하고 싶은 경고를 #pragma warning(disable: 4351)와 같이 입력하면 그 영역 내에 있는 경고만 무시됩니다. 아래 코드의 경우 Test 클래스의 경고는 무시되고 SubTest 클래스의 경고는 그대로 출력됩니다.

#pragma warning(push)
#pragma warning(disable: 4351)

class Test
{
	int m_ints[10];
	double m_doubles[10];

public:
	Test()
		: m_ints() // C4351
		, m_doubles() // C4351
	{
	}
};

#pragma warning(pop)

class SubTest : public Test
{
	bool bools[10];

public:
	SubTest()
		: bools() // C4351
	{
	}
};