1 워닝 레벨4로의 이점과 피하기 힘는 경고의 해결법 #
Debugging Application for Microsoft .NET and Microsoft Windows 에서 참조.MS 컴파일러 기준.
컴파일시의 모든 경고를 나타나지 않도록 한다는 것은 컴파일러가 추측하는 부분이 없도록 가능한 모호한 부분이 없도록 코드를 작성하는 것을 의미한다. 가장 대표적인 경고로 부호있는 형식과 부호없는 형식으로 변환할때 항상보고 되는 C4244(데이터가 손실될수 있습니다.)가 있으며 이것은 사용자가 컴파일러에게 적절한 형변화을 명시적으로 코딩함으로써 제거 할수 있다.
사실 책에서는 워닝레벨은4! 모든 경고를 에러로 설정해라! 라고 나와있다. 음 나도 경고를 바로바로 올바르게 수정하기 위해서 책이 옳다고 생각은 하지만 실제 컴파일 할때는 그렇게 하지 않고 있다. 으음 상당히 성가시게 느껴져서 인듯. 고쳐야지 -_-;;;
1.1 이점 #
워닝레벨을 4로 올리게 되면 레벨3 까지는 나타나지 않던 워닝중 함수의 매개 변수를 함수내부에서 한번도 사용하지 않았다는 경고와 지역변수중 초기화 이후 한번도 사용하지 않은 변수에 대한 경고가 나타난다. 두가지의 경고를 제거하는것은 런타임시의 속도를 올리는 대에도 많은 도움이 될것이다.물론 잠재적인 버그의 예방과 이후 유지보수의 유리함은 당연한것이다.
1.2 문제해결 #
하지만 워닝레벨을 4로 올렸을 경우에는 Visual C++과 함께 제공되는 STL에서도 수많은 경고메세지가 나타날수 있다. 이런 경우에는#pragma warning ( push, 3 )
#include “IDoNotCompileAtWarning4.h”
#pragma warning ( pop )
// Ex::구조체/공용제의 이름이 없습니다. 를 비활성화
#pragma warning ( disable : 4201 )struct Vector3
{
union
{
double Arr[3]
struct
{
double X;
double Y;
double Z;
}
}
}#pragma warning ( default : 4201 )
그리고 위에도 잠깐 언급했던 C4100( 참조되지 않은 매개변수 ) 경고는 클래스의 상속구조를 사용시 불가피 하게 발생할수 있는 경고이다. (특정 자식클래스들이 사용하기 때문에 예약된 매개변수 라던지…) 이 경우는 사용하지 않는 함수의 선언부의 변수명을 주석처리 해주면 해결된다.
void CMakeTreeDoc::SetModifiedFlag(BOOL bModified )
{
}
void CMakeTreeDoc::SetModifiedFlag(BOOL /*bModified*/ )
{
}