C언어 컴파일러 들

프로그래밍 언어로 C 언어를 주로 사용하고 있지만, 역사나 표준안 같은 것에는 별로 관심이 없었습니다. 제가 C언어를 배우게 된 상황도 목적도 없이 어쩌다가 배우게 된 것인데요. 저의 경우는 학교를 통해서 프로그래밍 공부를 시작한 것은 아닙니다. 1990년도쯤 처음으로 퍼스널 컴퓨터(삼성 컴퓨터로 XT급)를 구입하고, 어렵게 DOS 사용법을 공부한 후에 그 당시 대부분의 사람들이 그랬듯이, 아래아 한글을 사용하게 됩니다. 개인적으로 공부한 아래아 한글을 이용해서 업무용 문서 몇 개 만들고 사내 전산화(?) 구축했다고 자랑스러워하면서요. 그때 즈음해서 주변의 컴퓨터 좀 다룬다는 친구들이 파스칼(프로그래밍 언어) 얘기를 합니다. 친절하게 터보 파스칼을 플로피 디스크에 복사해서 주기도 했고요. 터보 파스칼 버전은 정확하지는 않지만 6.0으로 생각됩니다. 원래는 install 프로그램을 실행해서 설치해야 하는 것이 정상인데, 그 당시 저에게 준 것은 그냥 플로피 디스크에서 실행을 하던가, 하드디스크가 있다면 통째로 복사를 해서 실행하던가 하는 것입니다. 즉, 누군가가 설치한 것을 폴더채로 복사해서 돌려 쓰는 것입니다. DOS 운영체제용 프로그램은 이런 것이 가능했습니다.  

아래아 한글은 어찌 물어물어 사용법을 익혔는데 프로그래밍 공부는 상황이 좀 다릅니다. 책을 사러 교보문고에 갔는데 당시에는 지금과는 다르게 컴퓨터 코너라고 해봐야 큰 테이블 정도가 다였습니다. 거기서 성안당에서 출판하는 터보 파스칼 책을 구입한 후에 집에 와서 읽어봤는데 무슨 소리인지 하나도 모르겠습니다. 좌절 모드로 가끔 실행 화면만 보는 상황에서 나중에 가남사에서 나온 터보 파스칼 책을 구입했습니다. 결과는 성안당 책이 이상한 거였습니다. 기억이 맞다면 번역서였을 거고 번역자도 파스칼 언어와 터보 파스칼을 사용해 본 적이 없는 상태에서 말 그대로 번역만 한 듯합니다. 당시에는 이런 오류가 심한 책이 많았습니다. 윈도우즈 3.1 속도를 빠르게 하기 위해서 config.sys에서 files의 크기(동시에 열 수 있는 파일 수로 당시 프로그램이 이 값에 영향을 받는 경우는 본 적이 없습니다)를 크게 해야 한다는 등 근거 없는 예기를 써놓은 책도 많았습니다.  

이렇게 프로그래밍 이론이나 자료구조와 같은 지식이 전혀 없는 상태에서 터보 파스칼로 프로그래밍 공부를 하던 중에, 이번에도 주변에 컴퓨터 좀 한다는 친구들이 요즘에는 C 언어가 대세라고 합니다. 이번에는 제가 직접 교보문고 가서 터보 C 2.0을 복사해 왔습니다. 이 즈음에서 잠시 다른 얘기를 합니다. 1990년대 당시 상황을 모르시는 분은 제가 교보문고 가서 프로그램을 복사해 왔다는 글을 읽으면서 이러실 겁니다. "이 사람 무슨 소리를 하는 거야. 그런 큰 기업이 대놓고 불법 복제를 했다는 말인가?" 이러실 수도 있는데 저의 대답은 "그 당시에는 복사해 줬습니다."입니다. 교보문고의 매장 시스템을 정확히 알지는 못하는데 당시 입점한 컴퓨터 가게인지는 모르겠지만, 대놓고 프로그램 리스트 걸어놓고 5.25인치 플로피 디스크 한 장당 천 원에 복사해 줬습니다. 불법 복제라는 개념이 없는 때이지요. 꼭 교보문고가 아니더라도 플로피 디스크 한통 들고 동네나 용산 컴퓨터 상가에서 돌아다니다 새로 개업한 가게다 싶으면 씩씩하게 들어가서 필요한 프로그램을 복사해 갈 수 있었습니다. 혹시라도 가게 주인이 와서 물어보면 "1년 전쯤에 여기서 컴퓨터 구입했는데요"라고 말하면 됩니다. 조심할 것은 동네 컴퓨터 가게에 들어가는데 중국 집하다 컴퓨터 가게 개업한데 들어가서 저 소리 하면 낭패이니 잘 알고 가야 합니다. 지금은 사용 못할 방법이고, 교보문고에 당연히 복사해주는 곳은 없습니다.


처음으로 접하게 된 C 언어 (통합 개발 환경)
아래의 화면은 터보 C 2.01을 실행하면 나오는 화면입니다. 터보 C 나 터보 파스칼은 당시에 통합개발환경이라는 것을 처음 도입한 프로그램입니다. 당시의 MS C나 왓콤 C 등의 다른 컴파일러는 DOS상에서 명령 프롬프트로 인자를 전달하는 방식으로 컴파일하도록 되어 있었습니다. 지금의 GCC도 쉘 프롬프트 상에서 컴파일 작업을 합니다.

<그림1> Turbo C 실행 화면

 

새로 배우는 프로그래밍 언어이므로 역시 책이 필요합니다. 이번에도 교보문고로 가서 책을 사게 되는데요. 지금처럼 많은 도서가 쏟아져 나와서 선택의 고민을 할 필요가 없습니다. 몇 개 없는 C언어 도서 중에서 예전 터보 파스칼의 교훈을 참고하여서 골라보니 이번에도 가남사에서 출판한 C 언어 책이 보였습니다. 터보 C 정복!!!. 거창하게 말해서 제 인생을 전환시킨 (좀 이상하게 전환돼서 MCU 제어 쪽으로 전환되는) 그 책을 선택하게 됩니다. 지금은 중고책으로도 못 구하고, 이 글을 쓰기 위해서 이미지 구하는데도 어려웠습니다. 겨우 아래의 작은 이미지 하나 구했습니다.  

터보 C 2.0을 대상으로 쓴 책으로 터보 C 2.0 환경설정부터 하나씩 자세히 나왔습니다. 터보 C 2.0을 대상으로 하므로 초기 ANSI C를 기준으로 쓰여 있고, 지금 와서 생각하면 포인터에 과하다 할 정도로 너무 비중을 크게 두어서 설명을 진행했습니다. 프로그래밍 언어로 C언어를 공부하려는 사람들에게 포인터에 대한 안 좋은 기억을 남겨서 C언어를 멀리하게 하는데 한 몫한 책이라고 말하면 너무 심한 평일까요. 하여튼 제 생각으로는 그 정도로 너무 어렵고 사실 코드가 난해해져서 사용하지도 않을 기법까지 설명하는 바람에 지쳐 쓰러질 정도였습니다. 마지막으로 책 후반부 구조체 단원에서 구조체 무용론을 펼치는데 그 당시에는 모르지만 지금의 구조체는 클래스의 전신으로 꽤 중요하다고 봐야겠습니다. 이러한 문제를 제외하고는 그 시절에 봤던 책 중에서 가장 완성도가 높은 컴퓨터 서적이었습니다.

<그림2> 터보C정복

 

위의 책과 프로그램으로 공부는 1년 넘게 한 것으로 생각되는데 Turbo C를 업무에 쓰거나 한적은 없습니다. 이후 윈도우즈 시대로 넘어와서 WinAPI 프로그래밍이 시작되었을 때에도 공부는 참 열심히 했는데 막상 이를 사용해서 무엇인가를 만든 적은 없습니다.


윈도우즈 프로그래밍의 절대 강자 Visual C++ 6.0 
제목을 보고 "아니다 Visual Basic 6.0이 더 유명하다" 이렇게 말씀하시는 분도 있을까요? 사실 제가 윈도우즈 프로그래밍을 하는 것은 아니라서 둘 중의 어느 것이 더 많이 쓰이는지, 영향력이 있는지는 모르겠습니다. 다만 확실한 것은 학원이나 학교 등의 교육 현장에서 또는 C 언어 입문 책에서 오랫동안 자리를 차지하고 있는 C 언어 입문용 프로그램 본좌인 것을 부인하지는 못할 겁니다. 2010년대 초반 즈음인가 회사에서 좋게 말하면 업무 영역 넓히라고 (비관적으로는 더 많이 굴려 먹으려고) MCU 관련 개발자인 저를 PC 프로그래밍 교육 학원에 보내게 됩니다. 당시에 MFC를 공부하기 전에 배운 C/C++를 공부할 때 Visual C++ 6.0을 사용했습니다. 강사로부터 아직은 6.0이 최고이다 예기를 들으면서요. 억지 주장을 좀 하자면 이때 즈음부터 "아직은 ~~~이다"란 "예전에 버려야 했을 구 기술이다"로 이해하게 된 계기가 되었습니다.

<그림3> Visual C++ 6.0

 

이 개발 툴은 단품으로도 판매되지만 Visual Studio 6.0에 포함된 하나의 구성품으로 사용하게 됩니다. 일부는 정품으로 일부는 불법 복제로 사용했었습니다. 이중에 포함된 Visual Basic 6.0도 상당 기간 유명했던 개발 툴입니다. 요즘 자바가 대세라고 하는 만큼 당시에는 Visual Basic 6.0이 그랬습니다.  

이 Visual C++ 6.0은 콘솔 프로그램, Win32 프로그램, MFC 프로그램 등을 개발할 수 있었고, 제품명이 Visual이지만 별로 Visual 하지 않은 개발 툴이기도 합니다. C언어 프로그래밍 입장에서는 ANSI C와 C99 표준(아마도 일부분 만)까지는 지원했습니다.


 

WinAVR & AVR Studio, CodeVision 
지금부터 예기하는 툴은 PC와는 관계없는 MCU 관련 툴입니다. 예전과는 다르게 컴퓨터의 성능이 비약적으로 발전하면서 기존의 프로그래밍 방식으로는 이에 대응할 수 없어서 객체지향 프로그래밍과 최근에는 함수형 프로그래밍이라는 예기가 나오고 있습니다. 이에 따라 C++, Java, C# 등 객체 지향 프로그래밍 언어가 새로 등장했습니다. 이와는 다르게 MCU 개발에서는 자원의 제약 및 하드웨어 직접 제어의 필요성으로 지금까지도 C언어가 사용되고 있습니다. 10년 전에 Java를 사용할 수 있게 자바 해석기를 넣는다는 예기도 나오고, 지금은 MCU용 C++ 컴파일러도 있지만, C 언어의 성능과 하드웨어의 직접 제어에 따른 코드의 직관성을 따라올 수는 없습니다. 이에 비해서 코드의 규모가 PC 프로그램과 같이 대형화되어서 개발에 어려움이 있는 것도 아니고요. 결론은 "아직은 C언어이다"가 아니라 객체지향 언어를 도입해야 할 이유도 없고 C 언어를 사용하는 지금 무슨 문제가 있는 것도 아니므로 "MCU 제어에서는 C언어는 건재하다"입니다.  

1990년대 말부터 C언어를 사용하기는 했지만 당시에는 여러 개발 툴을 사용하는 춘추 전국시대였다면, 2000년대 초부터는 WinAVR & AVR Studio를 주로 사용하였습니다. 간단히 설명하자면 WinAVR은 GCC 기반으로 AVR MCU에 사용할 수 있도록 포팅한 컴파일러입니다. GCC가 유닉스 계열 컴파일러이므로 Gygwin 등의 리눅스 서브시스템 환경에서 사용해야 하나, 윈도우즈 OS상에서 사용 가능하도록 되어 있습니다. 그래서 이름을 WinAVR이라고 붙였는지 모르겠습니다. 이름이 중요한 것은 아니고 GCC를 AVR MCU 기반 하드웨어를 개발할 수 있도록 포팅한 것이고, GCC이니 당연히 통합개발환경은 없었습니다. 즉, 자신이 선호하는 에디터를 사용해서 코드를 만들고, makefile을 만들어서 컴파일과 링크 작업을 해야 합니다. 조금이라도 통합개발환경을 흉내내기 위해서 에디트 플러스와 같은 코딩용 에디터를 사용하기도 했습니다. AVR Studio는 프로그램 다운로드와 디버깅을 할 수 있는 프로그램으로 ATMEL사에서 제공하였습니다.

<그림4> AVR Studio 4

 

지금은 Atmel Studio 7이라는 프로그램으로 바뀌었고, ARM Core도 지원하는 상당히 무거운 프로그램입니다. 그래서 지금도 AVR Studio 4.19(AVR 전용 최종 버전으로 윈도우즈 7까지 사용 가능)를 사용하는 경우가 많습니다. 정확히 언제부터인지는 모르지만 WinAVR을 미리 설치하면 AVR GCC라는 이름으로 자동 인식하고 이를 이용한 에디팅, 컴파일, 다운로드가 가능하도록 되었습니다. Atmel Studio에서는 AVR GCC를 포함하고 있기는 한데, ARM Core MCU 개발도 가능하도록 되어서 프로그램이 상당히 무거워졌습니다.  

MCU 개발 툴 중에는 IAR Systems의 개발 툴을 최고로 평가합니다. 다만, 500만 원대의 고가라 웬만한 기업은 구매 기안을 올리면 돌아오는 대답은 "크랙 써라."입니다. 걸리면 회사에서 책임지는 건지는 잘 판단해야겠지요. 그것에 비하면 당시 30만 원대인 CodeVision은 엄청 싼 것이었습니다.

<그림5> CodeVision

 

컴파일러, 디버깅, 다운로드가 가능한 완벽한 통합개발환경입니다. 그런데 여러 가지로 불편해서 컴파일만 하고 다운로드, 디버깅은 AVRStudio를 이용하고, 에디터 기능도 많이 떨어지는 편이라 에디트 플러스를 이용했습니다. 결과적으로 통합개발환경이라고 구입했지만 컴파일만 하고 에디터와 디버거 & 다운로더는 다른 프로그램을 사용한 것이 됩니다. CodeVision, EditPlus, AVRStudio 조합은 거의 10년 가까이 사용한 개발 툴입니다. 이 기간 동안 제 직급과 연봉도 비약적으로 발전한 기간입니다. 이 프로그램들은 나중에라도 부활(?)하게 될지 몰라 백업 하드디스크에 고이 모셔놓고 있습니다.


Atollic TrueSTUDIO 
요즘은 특별한 이유가 없으면 AVR 시리즈의 MCU를 사용할 일은 없습니다. 가끔 급하게 무언가를 제어할 필요가 있을 경우에는 아두이노를 사용하고 있습니다. 아두이노는 스크래치라는 C언어처럼 생긴 코드를 사용하므로 위에 말한 개발 툴은 필요가 없습니다. STM사에서 2018년 1월 18일부터 Atollic TrueSTUDIO를 무료로 제공하고 있습니다. 예전에 Atollic사는 STM사와는 별개의 회사로 수십만 원 정도로 TrueSTUDIO를 판매했는데 STM사에서 Atollic사를 인수 후에 이 개발 툴을 무료로 제공하고 있습니다. 달라진 것은 기존에는 여러 ARM MCU를 지원했는데 인수 후 무료로 배포가 되면서 STM사의 MCU만 사용할 수 있게 바뀌었습니다.

<그림6> Atollic TrueSTUDIO

화면을 보면 어디서 많이 봤다고 생각될 텐데 Eclipse 기반으로 ARM GCC와 디버깅 기능 등 기타 필요한 프로그램을 패키지화해서 만든 개발 툴입니다. 특이하게도 PC 콘솔 프로그램 프로젝트도 생성할 수 있습니다. 조금 다른 것은 GCC의 모든 명령행 옵션을 지원하는 것 같지는 않습니다. 대표적으로 어셈블리 코드 생성이 안됩니다. MUC 프로젝트는 C11 표준을 기본 설정으로 하고 있지만, PC 콘솔 프로그램은 프로젝트에 표준에 대한 내용 자체가 없어서 정확히 어느 표준까지 지원하는지는 확인되지 않았습니다.  

한때 유료로 판매하던 툴이고 지금은 MCU 개발사에서 지원하는 개발 툴이므로 컴파일, 디버깅, 다운로더가 완벽하게 지원됩니다. 더욱 좋은 것은 무료이므로 "크랙 찾아봐"라는 소리를 들을 필요가 없다는 것입니다.


 

GCC 컴파일러 들 
요즘에는 개발 툴 무료화 경쟁이라도 하는지 여기저기서 무료화 되었다는 예기가 많이 나옵니다. 절대로 그럴 일이 없을 거라고 생각되던 Visual Studio가 Community 버전을 만들어서 무료로 제공하고 있습니다. (Visual Studio Community는 기업에서 사용할 경우 라이선스 내용을 정확히 숙지하고 사용 여부를 고려해야 합니다. 무조건 무료가 아닙니다.) 

PC 프로그래밍 분야만 생각해보면 디바이스 드라이버와 같은 특수 환경을 제외하면 C언어로 프로그래밍을 하는 경우는 볼 수 없습니다. Visual C++도 C++ 컴파일러이지 C 컴파일러가 아닙니다. MSDN을 검색해봐도 C언어에 대한 내용을 찾을 수가 없습니다. 그냥 C++가 C 코드를 컴파일할 수 있으니 포함된다는 느낌이 강합니다. 이러한 이유로 남은 것은 GCC 계열의 컴파일러만이 완전한 C 컴파일러라고 생각할 수밖에 없습니다.  

GCC 기반 컴파일러 중에서 가장 간단한 방법으로 사용할 수 있는 것은 MinGW 컴파일러입니다. Cygwin과 같은 리눅스 서브 시스템 없이도 프로그램 설치만으로 바로 컴파일을 할 수 있습니다. 다만, 통합개발환경이 아니므로 별도의 에디터가 필요하고 여러 소스를 프로젝트로 관리하려면 make 기능을 사용할 줄 알아야 합니다. 디버깅도 gdb라는 명령행 디버깅을 사용해야 합니다.

<그림7> MinGW 홈페이지

 

http://www.mingw.org/

 

MinGW | Minimalist GNU for Windows

 

www.mingw.org

위 링크를 들어가면 MinGW 설치 프로그램을 받을 수 있습니다. 설치는 선택한 옵션에 맞게 해당 파일을 인터넷에서 다운로드하여야 하므로 설치 중에 인터넷에 연결되어 있어야 합니다. 단, 32비트 컴파일러로 64비트 프로그램은 만들 수 없습니다. 64비트 프로그램을 생성하고 싶으면 아래의 링크에서 프로그램을 받아서 설치해야 합니다.

http://mingw-w64.org/doku.php/start

 

Mingw-w64 - GCC for Windows 64 & 32 bits [mingw-w64]

 

mingw-w64.org

 

MinGW를 64비트가 지원되도록 포팅하던가 위의 링크에서 작업한 내용을 합치면 되지 않느냐고 생각되겠지만, 이것이 그렇게 간단한 문제가 아닌 듯합니다. 정확한 표현은 아니지만 기술적인 문제보다는 mingw.org에서 생각하는 컴파일러의 기준과 아래 64비트 컴파일러의 기준이 다릅니다. 관련 문서가 있으나 정리가 필요하고 여기에 그 내용을 넣기에는 글의 길이가 너무 길어지므로 추후 설명하기로 하겠습니다. 당장은 설치하려는 컴파일러를 정한 후에 해당 사이트에서 다운로드하여서 설치해야 합니다. 개인적인 생각은 요즘 대부분의 OS가 64비트를 사용하므로 아래의 64비트용 컴파일러를 받는 것이 맞다고 생각됩니다.  

위 MinGW-W64 홈페이지에서 다운로드한 것은 설치 프로그램으로 설치 프로그램을 실행하면 아래와 같은 화면이 나옵니다. MinGW 설치 파일과 동일하게 설치를 위해서 인터넷에 연결되어 있어야 합니다.

<그림8> MinGW-W64 설치 화면


C 컴파일러에 대한 결론 
제가 C언어를 공부한지는 꽤 오래 전의 일이고, 가장 최근의 C언어 입문 서적이라면 "C 기초 플러스 6판"이라는 책을 가지고 있습니다. 이 책은 컴파일러 사용에 대한 내용은 전혀 없고 C 언어 문법에 대한 내용만 있습니다. 요즘에 C언어를 사용한지도 오래됐고 정리도 할 겸해서 몇 개의 C언어 관련 책을 구입했습니다. 그중에서 "열혈 C 프로그래밍"이라는 책도 있습니다. 인터넷 상에서 보면 나름대로 C언어 입문서 베스트셀러 도서로 보입니다. 개정판이라고 되어 있지만 2010년도 출판이고 지금 가지고 있는 책은 2017 6월 9쇄 판입니다. 프로그래밍 연습은 Visual Studio 2010을 사용하도록 되어 있습니다.  

지금 이 글을 쓰고 있는 현재 Visual Studio 2017이 최신 버전입니다. MSDN을 아무리 검색해도 C언어에 대한 내용은 명확하지 않습니다. C 언어 컴파일러가 따로 있는 건지? (아마도 아닐 겁니다.) C 표준은 어디까지 지원하는지에 대한 정보가 없습니다. 그냥 C++ 컴파일러가 C 코드도 컴파일해준다 그 이상의 의미가 없는 것처럼 보입니다. 어쩌면 당연할 수도 있습니다. PC 프로그램이 이미 C언어로는 감당하기 어려운 정도로 규모가 방대해졌고, .net을 주력으로 지원해야 하는 마이크로소프트사 입장에서는 굳이 C언어를 지원하려고 노력할 필요는 없겠지요. 

이 글을 쓰는 시점으로 최신의 표준은 C17입니다. C17 표준을 완벽히 지원한다고 알려진 컴파일러는 Pelles C가 있습니다. GCC도 버전 8부터는 C17 표준을 지원하는 것으로 알고 있습니다. Pelles C의 주소는,

http://www.pellesc.de/index.php?page=about&lang=en

 

Pelles C - About

Pelle lives in Stockholm, Sweden. He started coding in BASIC around 1979 (on a Swedish computer called ABC80), but soon moved on to Z80 assembly code. He is working professionally since 1984. Mostly in BASIC, X86 assembly code and C (since ~1993).His Homep

www.pellesc.de

입니다. 개인 개발자인데 컴파일러는 lcc를 이용하고 통합개발환경을 만든 것으로 보입니다. 현재로는 C17 표준을 완벽히 지원하는 것으로 알려져 있습니다. 단, 2018년 8월에 9.0 버전이 릴리즈 되었고 이 컴파일러가 C17을 지원합니다. 


요즘 대부분의 대학교에서는 Visual Studio를 이용해서 C언어를 가르치는 것으로 보입니다. 강력한 통합개발환경으로 접근이 쉬은 것이 주 이유라고 생각되기는 하나 표준안을 지키지 않는 컴파일러를 사용하다 보면 C언어의 최근 기능을 익힐 기회는 더욱 없어질 것이라고 생각됩니다. 또한 C언어로 무언가 의미가 있는 PC 프로그램을 만들기는 어렵습니다. 실제로는 디바이스 드라이버와 같은 특정한 상황이거나 MCU 제어에 사용할 가능성이 많은데 이러한 환경은 Visual Studio를 이용한 응용 프로그램을 개발하는 것에 비하면 척박한 환경입니다. 공부하는 김에 이러한 환경에 근접한 GCC를 사용하는 것이 더 좋은 선택이라고 생각됩니다.

'Technical Note' 카테고리의 다른 글

한글 Lorem Ipsum  (0) 2019.07.08
C언어 컴파일러 들  (0) 2019.06.06
마이크로컨트롤러의 발전  (0) 2019.06.06
ASCII Table (아스키코드 표)  (0) 2019.06.06
도스 프로그래밍 (메모리 모델)  (0) 2019.06.06
운영체제가 하는 일  (0) 2019.06.06

댓글(0)

Designed by JB FACTORY