- 컴파일러 경고를 쉽게 지나치지 마라. 컴파일러에서 지원하는 최고 경고 수준에도 경고 메시지를 내지 않고 컴파일되는 코드를 만드는 쪽으로 노력해라.
- 컴파일러 경고에 너무 의존하지 마라. 컴파일러마다 경고를 내는 부분이 다르다. 지금 코드를 다른 컴파일러로 이식하면 경고 메시지가 달라질 수 있다.
컴파일러 경고
컴파일러 경고를 무시하면 안 된다.
예를 들어 보자.
class B {
public:
virtual void f() const;
};
class D: public B {
public:
virtual void f();
};
가상 함수인 B::f를 D::f에서 재정의하겠다는 의도인데, 실수가 있다.
B 클래스의 f는 상수 멤버 함수이지만, D 클래스의 f에는 const가 붙어 있지 않다.
이 코드를 컴파일하면 경고가 나온다.
warnning: D::f() hides virtual B::f()
B에서 선언된 f가 D에서 재선언된 것이 아니라 아예 가려졌다는 뜻이다.
이 경고를 무시하고 지나가면 프로그램이 이상하게 동작할 수 있다.
그리고 경고를 처리하는 것에 익숙해지면 중요도를 인지하여 처리 여부를 결정할 수 있다.
중요한 것은 컴파일러가 경고 메시지를 보내는 의도를 파악해야 하는 것이다.
또한, 컴파일러 경고는 제작사의 고유 선택에 따라 달라지는 것이기 때문에, 너무 의존해서도 안된다.
- 컴파일러 경고를 쉽게 지나치지 마라. 컴파일러에서 지원하는 최고 경고 수준에도 경고 메시지를 내지 않고 컴파일되는 코드를 만드는 쪽으로 노력해라.
- 컴파일러 경고에 너무 의존하지 마라. 컴파일러마다 경고를 내는 부분이 다르다. 지금 코드를 다른 컴파일러로 이식하면 경고 메시지가 달라질 수 있다.
컴파일러 경고
컴파일러 경고를 무시하면 안 된다.
예를 들어 보자.
class B {
public:
virtual void f() const;
};
class D: public B {
public:
virtual void f();
};
가상 함수인 B::f를 D::f에서 재정의하겠다는 의도인데, 실수가 있다.
B 클래스의 f는 상수 멤버 함수이지만, D 클래스의 f에는 const가 붙어 있지 않다.
이 코드를 컴파일하면 경고가 나온다.
warnning: D::f() hides virtual B::f()
B에서 선언된 f가 D에서 재선언된 것이 아니라 아예 가려졌다는 뜻이다.
이 경고를 무시하고 지나가면 프로그램이 이상하게 동작할 수 있다.
그리고 경고를 처리하는 것에 익숙해지면 중요도를 인지하여 처리 여부를 결정할 수 있다.
중요한 것은 컴파일러가 경고 메시지를 보내는 의도를 파악해야 하는 것이다.
또한, 컴파일러 경고는 제작사의 고유 선택에 따라 달라지는 것이기 때문에, 너무 의존해서도 안된다.