1-3-나.컴파일러의 종류

C/C++ 컴파일러에는 많은 종류가 있다. 라면에 신라면, 진라면, 너구리 등등이 있는 것처럼 기업들은 수요가 있으면 만들게 되어 있다. 지금까지 발표된 컴파일러만 해도 수백종이 훨씬 더 되며 이 중 몇 가지는 고도로 발전되어 있어 성능도 좋고 사용하기도 편리하다. 사실 C/C++만큼 컴파일러가 잘 만들어져 있는 언어도 드문데 이것도 C/C++의 장점 중 하나이다. 컴파일러의 성능도 언어의 스팩만큼이나 중요하기 때문이다. Ada나 SmallTalk도 좋은 언어임은 분명하지만 컴파일러의 지원이 미약하다.

컴파일러가 생성해 내는 기계어는 특정 CPU와 운영체제에서만 동작하기 때문에 컴파일러는 본질적으로 플랫폼에 종속적이다. 매킨토시용 컴파일러로 인텔 계열 CPU에서 동작하는 프로그램을 작성할 수 없으며 도스용 컴파일러로 윈도우즈용 프로그램을 작성할 수 없다. 운영체제별로 C/C++ 컴파일러를 분류해 보면 다음과 같다.

 

운영체제

컴파일러

도스용

터보 C, 볼랜드 C++, MS C

윈도우즈용

비주얼 C++, 볼랜드 C++, LCC, 왓콤 C, Dev-C++

유닉스용

gcc

 

같은 컴파일러라도 버전에 따라 기능과 사용 방법, 지원하는 문법 수준이 다르므로 사용할 컴파일러를 선택하는 것은 아주 어려운 일이다. 이중 일부는 무료로 사용할 수 있는 공개용인 것도 있지만 대부분의 컴파일러는 돈을 주고 구입해야 하는 상용 프로그램이다. 물론 이것 저것 다 설치해 놓고 상황에 따라 컴파일러를 바꿔 가며 쓸 수도 있겠지만 지금 막 문법을 배우기 시작한 사람들은 여러 가지 컴파일러를 동시에 사용하기 어려울 것이다.

전통적으로 C 입문용으로 가장 많이 사용된 컴파일러는 볼랜드사의 터보 C 2.0인데 발표된지 20년 가까이 되어 가지만 교육용으로 사용하기에는 아직까지도 큰 무리가 없다. 통합 개발 환경을 지원하며 도스 환경에서 그래픽까지 가능하기 때문이다. 아직도 터보 C2.0을 기준으로 하고 있는 문법서들이 많으며 일선 학원에서도 많이 사용하고 있다. 아마 앞으로도 최소한 10년간은 더 사용될 것이다. 그러나 C++ 이전의 컴파일러이기 때문에 C 문법만 지원하며 C++은 지원하지 않는다.

그래서 C++ 문법까지 고려했을 때 볼랜드 C++ 3.1이 가장 가볍고 교육용으로 적합한 컴파일러이다. 이 버전은 도스와 윈도우즈를 동시에 지원하므로 프로그래밍 실습은 물론이고 실무에 사용할 수도 있다. 그러나 아쉽게도 16비트용 컴파일러이기 때문에 현재 상황과는 많은 부분이 일치하지 않는 문제가 있다. 볼랜드 C++ 4.0이상은 32비트 컴파일러이기는 하지만 현재는 사용하는 사람이 거의 없는 실정이다.

실무에서 가장 많이 사용되는 컴파일러는 마이크로소프트사의 비주얼 C++이다. 윈도우즈 전용 컴파일러이므로 윈도우즈용 프로그램을 가장 잘 생성하며 작업 환경이 쾌적하다. 코드를 자동으로 생성해 주는 위저드 기능과 MSDN이라는 방대한 도움말, 프로젝트 관리 기능 등 개발자를 위한 많은 지원들이 포함되어 있다.

그러나 비주얼 C++은 실무용 컴파일러이기 때문에 교육용으로는 다소 적합하지 못한 면들이 많다. 우선 생성할 수 있는 프로젝트의 종류가 너무 다양하고 복잡하기 때문에 초보자에게 혼란을 줄 수 있는 소지가 많으며 반드시 프로젝트를 구성해야 하기 때문에 많은 예제를 만들어 테스트 해 보기에 번거롭다. 또한 상용이기 때문에 반드시 돈을 주고 구입해야 하며 덩치도 지나치게 커서 실습용으로 부담없이 설치해 볼만한 정도가 아니다.

비주얼 C++은 윈도우즈 전용의 컴파일러이기 때문에 도스에 대한 지원이 없다. 대신 도스와 비슷한(비슷한 것이지 같은 것은 아니다) 콘솔 환경을 지원하는데 콘솔에서는 기본적인 입출력만 해 볼 수 있으며 도스에 비해 화면 제어 능력이 취약하다. 예를 들어 화면을 지우는 clrscr, 커서를 옮기는 gotoxy 함수 등이 없으며 출력할 텍스트의 색상이나 속성을 바꿀 수가 없다. 또한 콘솔 환경은 그래픽도 지원하지 않기 때문에 실습의 재미도 없고 예제도 빈약할 수 밖에 없다.

비주얼 C++은 실제 프로젝트를 할 때는 최상의 선택이 될 수 있지만 C/C++ 문법을 처음 배울 때는 기능이 너무 많아 다소 부담스러운 컴파일러이다. 그래서 비주얼 C++을 입문용 컴파일러 채택한 문법서는 거의 없는 편이며 아직까지도 터보 C 2.0이 교육용 컴파일러로 사랑받고 있는 것이다. 문법을 배울 때는 성능이나 효율보다는 설치의 간편성과 실습의 편의성이 더 중요하기 때문이다.

C/C++을 공부해 보기로 마음먹었다면 어떤 컴파일러를 사용할 것인지는 자신의 상황에 따라 스스로 결정해야 한다. 리눅스 환경을 사용하고 있다면 gcc를 사용해야 할 것이고 간단하게 실습해 보고 싶다면 터보 C 2.0을 사용할 수도 있다. 본문에서 모든 컴파일러에 대해 다 설명할 수는 없기 때문에 한가지 컴파일러를 선택할 수밖에 없다. 이 책은 비주얼 C++을 기준으로 하는데 실습 컴파일러를 선정하기 위해 엄청난 고민을 했고 여러 사람들로부터 자문을 받아야 할만큼 어려운 결정이었다.

개발툴 자체가 조금 복잡하지만 32비트가 일반화된 상황이니만큼 아무래도 32비트 컴파일러로 시작하는 것이 좋을 것 같다. 어차피 실무를 할 때는 비주얼 C++을 사용해야 하므로 개발툴에 대한 사용법도 같이 공부할 수밖에 없다. 터보 C 2.0도 교육용으로 나쁘지 않지만 너무 오래되어서 현재 상황과 맞지 않는 점이 많다. 정수형의 크기나 세그먼트/오프셋 구조, 메모리 모델 따위는 이제 몰라도 된다. 그래서 이 책은 과감하게 32비트 컴파일러인 비주얼 C++을 기준으로 작성했다.

그러나 C/C++ 문법이 특별한 컴파일러를 요구하는 것은 아니므로 다른 컴파일러를 사용하는 것도 가능은 하다. 다만 고급 문법 부분에서는 컴파일되지 않는 경우도 가끔 있을 수 있고 컴파일러 구현상의 문제로 인해 결과가 달라지는 경우도 있다. 이미 익숙한 컴파일러가 있다면 계속 사용하되 완전히 처음 입문하는 사람이라면 가급적 이 책이 선정한 기준 컴파일러를 사용하기 바란다.