본문 바로가기

Library/C/C++

코드를 여러 컴파일러에서 컴파일해보라

좋은 코드를 작성하는 방법 중 한가지는 코드를 여러 컴파일러에서 컴파일해보는 것이다. 크로스 플랫폼을 염두에 둔 코드라면 당연히 거쳐야 하는 것이지만, 보통 특정한 컴파일러에서 컴파일에 성공하고 원하는대로 동작한다면 그것으로 그만인 경우가 많다. 특히, 가장 널리 쓰이는 컴파일러 중 하나인 Visual C++ 컴파일러의 경우, 엄격하게 문법의 적법성을 따져가면서 컴파일하지 않는다. 물론 버전 7 이상이라면 표준을 대단히 잘 준수하는 편에 속하기는 하지만, Visual C++은 상업적 목적의 개발 환경에 맞추어 개발된 컴파일러이며, 그렇기 때문에 정확하게 표준에 부합하지 않더라도 최대한 스스로 정보를 파악하여 컴파일이 성공하도록 도와준다.

그렇지만, 같은 코드를 gcc로 컴파일해보면 컴파일에 실패하는 경우가 심심치 않게 생긴다. 특히 템플릿에 관련된 경우가 그러한데, Visual C++이 템플릿 처리 속도에 있어서는 gcc 이상의 성능을 보여주기는 하지만, Visual C++의 '융통성 있는 처리'는 좋은 코딩 습관을 만드는데 좋지 않은 영향을 준다.

결론적으로, 코드를 작성하는데 설사 그 코드가 특정 플랫폼에서만 유효한 것으로 가정한다고 하더라도, 최대한 플랫폼 의존적인 부분을 제외한 다른 부분은 다른 컴파일러에서도 컴파일해보는 것이 좋다. 그리고, 특정 플랫폼으로만 한정 짓는다고 하더라도, 특정 플랫폼의 특정 컴파일러에서만 동작하는 코드는, 궁극적으로 올바르지 않은 코드일 가능성이 높으며, 결국 버그로 이어질 가능성이 크다. 코드를 여러 컴파일러에서 컴파일해보는 것은 표준에 부합하는 좋은 코딩 습관을 길러주는 방법 중 하나다.

물론, 이것은 당장 피부로 느낄 수 있는 부분은 아니지만, 이런 경험은 쉽게 지나쳤던 사소한 부분이나 C/C++ 표준에 대해서 깊이 이해하도록 도와주며, 더 단단한 코드를 작성하는데 도움을 줄 것이다.