본문 바로가기
서적 정리/Effective C++

53.컴파일러 경고를 지나치지 말자

by 민돌이2 2022. 1. 3.

학원에서 컴파일러 경고는 항상 인지하고 없게 하도록 하라고 배웠다. 당연시하게 암시적인 캐스팅 경고도 명시적으로 바꿔야하고 그냥 경고는 전부다 지워야한다고 배웠다. 예를들어 float에서 int로 캐스팅도 명시적으로 바꿔야 한다. 만약 내 포트폴리오를 면접관이 심심해서 컴파일했는데 경고가 우수수하게 나오면 어떤 생각을 할지 생각해봐라.

끔찍이란 단어가 떠오른다.

 

class B
{
public:
	virtual void f() const;
};

class D : public B
{
public:
	virtual void f();
};

가상 함수인 B::f를 D::f에서 재정의 하겠다는 의도인데, B클래스의 f 함수는 상수 멤버 함수이지만, D 클래스의 f 함수는 비상수 멤버 함수이다. 내가 사용하는 visual studio17에서는 경고 메세지는 주지 않지만, 경고 메세지를 낼 수 있다.

 

int main()
{
	int a = 3;
	float b = a;

	system("Pause");
	return 0;
}

int형 자료형인 a를 float형 자료형인 b로 대입한 코드이다. 암시적으로 int형을 float으로 캐스팅해서 대입될 것이다.

float b = a; //컴파일러 경고

int main()
{
	int a = 3;
	float b = (float)a;

	system("Pause");
	return 0;
}

위 코드처럼 명시적으로 캐스팅하면 경고는 없어진다.

 

 

이것만은 잊지 말자

컴파일러 경고를 지나치지 말자. 컴파일러에서 지원하는 최고 경고 수준에도 경고 메세지를 내지 않고 컴파일 되는 코드를 만드는 쪽에 전력을 다하자.

컴파일러 경고에 너무 기대는 인생을 지양하자. 컴파일러마다 트집을 잡고 경고를 내는 부분들이 천차만별이다. 지금 코드를 다른 컴파일러로 이식하면서 익숙해져 있는 경고 메세지가 없을 수 있다.

728x90

댓글