최근 정말 재미있는 책을 하나 읽고 있습니다. 바로 Short Coding이란 책입니다. 천천히 읽고 있는 관계로 독서평은 나중에 올리구요~
Short Coding을 하기 위한 환경을 Eclipse 3.4 CDT와 Cygwin으로 설정하였습니다.

아시다시피 Eclipse는 C/C++에도 막강한 기능을 발휘하는 툴이라고 생각합니다. 특히 gcc 컴파일러가 여러모로 추천되더군요~ 제가 특정한 플랫폼을 타켓으로한 C/C++ 어플리케이션을 개발하려는 것이 아니고 Short Coding 에 나오는 예제들을 중심으로 확인하려는 것이 가장 큰 목적이므로 별다른 고민없이 구축하였습니다.

특히 GCC를 사용할 수 있다는 큰 장점이 있습니다.

Step by Step으로 확인해 보겠습니다.


1. Cygwin 설치
첫번째로 Cygwin(http://cygwin.com/)에 접속하여 Cygwin을 다운로드 받아서 설치하여야 합니다. Cygwin(http://cygwin.com/) 사이트의 첫 페이지의 중간에 "Install or update now! (using setup.exe)"를 클릭하면 Windows OS용 설치 파일을 다운로드 받을 수 있습니다.


다운로드 받은 setup.exe 파일을 더블클릭하면 아래와 같은 Cygwin Setup Programe이 나타납니다.


Choose Installation Type을 "Install from Internet"을 선택하면 인터넷에서 필요한 설치 파일을 다운로드 받아 설치하게 됩니다. 당근 "Install from Internet" 를 선택하시면 됩니다.


설치 경로는 기본적으로 C:\cygwin 입니다.


그냥 패키지 디렉토리인데 따라 갑니다.


Connection Type을 선택하면 됩니다. Direct Connection을 선택합니다.


http://ftp.daum.net을 선택합니다. 우리나라에 있는 Server이기 때문에 빠른 속도로 설치할 수 있습니다. 참고로 ftp://ftp.daum.net을 선택하시면 ini 파일이 없다는 에러가 발생합니다.


기본적인 설치 패키지를 다운로드 받습니다.


패키지를 선택하는 화면입니다. 여기서 gcc를 설치하기 위하여 Devel을 클릭합니다.


Devel Category에는 여러가지 개발 관련된 Package들이 존재합니다. 반드시 gcc-g++gdb make 관련된 패키지를 선택하시기 바랍니다. 아울러 추가적으로 관심있는 여러가지 패키지를 선택하셔서 설치하시면 좋습니다. 생각보다 정말 많은 패키지들이 지원됩니다. :-)


이후 다음 버튼을 눌러서 본격적으로 설치하시면 Cygwin의 설치가 완료됩니다.



2. Cygwin 관련 환경변수 설정하기
Cygwin 을 모두 설치하시면 Windows OS의 경우 다음과 같이 환경변수를 설정해주시는것이 좋습니다.

CYGWIN_HOME이라는 변수명을 설정하시고 설치하신 Cygwin의 경로를 넣습니다.

그 후 PATH에 ;%CYGWIN_HOME%\bin;%CYGWIN_HOME%\usr\bin; 와 같은 환경 변수를 더 추가해 주시기 바랍니다. 이렇게 환경 변수를 설정해주셔야 Eclipse CDT에서 별다른 문제 없이 gcc로 개발을 하실 수 있습니다.

이렇게 환경 변수를 잘 설정하셨다면 gcc-3이나 gdb를 cmd 창에서 치시면 다음과 같이 나타납니다.



3. Eclipse CDT 설치하기

Eclipse 사이트(http://www.eclipse.org/)로 가셔서 Eclipse IDE for C/C++ Developers (79 MB)를 클릭합니다.


만약 기존에 사용하고 있는 Eclipse IDE에서 CDT 기능을 활용하시려면, CDT관련 Plugin 설치를 하시면 됩니다. 다만 Eclipse IDE for C/C++ Developers가 C/C++를 개발하기 편하도록 모든 설정이 되어 있으므로 Eclipse IDE for C/C++ Developers를 사용하겠습니다.


당근 Eclipse는 JVM 기반하에서 돌아갑니다. 따라서 JVM을 설치하여야 합니다. 만약 JVM 설치 방법을 알고 싶으시다면 http://blog.java2game.com/345 를 참고하시기 바랍니다. 자 적당한 디렉토리에 eclipse를 압축해제 하시고 eclipse.exe를 더블 클릭하시면 다음과 같이 Eclipse CDT가 나타납니다. 참고로 본 예제는 Eclipse Galileo 3.4 버전입니다.


자 Hello World를 찍어봐야겠죠 ;-) 다음과 같이 C++ 프로젝트를 생성합니다.


Project Name을 HelloWorld로 하겠습니다. 주의하셔야 할 것은 Toolchains에 Cygwin GCC가 나타나지 않는다면 환경변수 설정이 잘못된 것이니 확인하시기 바랍니다. Hello World C++ Project를 선택하시면 쉽게 C++ Project를 구성하실 수 있습니다.


Basic Settings를 설정합니다.


그러면 다음과 같이 기본적인 템플릿을 바탕으로 HelloWorld.cpp 파일이 자동 생성됩니다.


Ctrl + F11이나 다음과 같이 실행하시면 Console View에서 Hello World!!!를 확인하실 수 있습니다. :-)




Eclipse라는 강력한 IDE를 Java 말고 C/C++를 개발하시거나 테스트하시는데도 활용하시면 참 좋을 것 같습니다. gcc의 강력함도 함께 즐길 수 있는 Cygwin과 함께 말이죠 ;-)

더 자세한 내용은 http://www.eclipse.org/callisto/c-dev.php 를 참고하세요~
저작자 표시 비영리
신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. cywin 간편하니 좋아요.. 콘솔에서도 먹히는것도 좋고..ㅋㅋ
    아는 형들 보니까 펌웨이 코딩할 때 cygwin + eclipse로 작업하든데..
  2. 좋은 글 담아갑니다^^ 감사합니다^^
  3. 좋은글 잘봤습니다 ^^
    근데 환경변수 설정해서 cmd창에서 gcc-3이랑 gdb까지는 맞게 나오는데
    eclipse 에서 Toolchains: 에 cygwin이 안뜨네요 ㅠ
  4. 무지 헤매는 중인데.고맙습니다.^^
    ;%CYGWIN_HOME%\usr\bin .
    근데 usr에는 bin 없고 sbin이 있는데요?
  5. 좋은 정보 감사합니다.
  6. 윈도우즈를 주로 쓰는데 리눅스용 개발환경 때문에...
    이런 저런 삽질을 한참 했는데...

    덕분에 큰 도움 되었습니다.
    내일부터는 코딩해도 되겠네요 ^^

    감사합니다.
secret
Pointer의 선언은 다음과 같은 방식을 통하여 이루어 진다.

int  *a;


*a는 정수 타입이라는 결과를 나타낸다. * 연산자가 '간접지정 연산자'라는 것을 알고 있다면 a가 정수를 가리키는 포인터라는 것도 알 수 있을 것이다.

간접지정 연산자는 포인터 값에서만 유효하다. 포인터는 결과를 가리키고, 간접지정 연산자는 결과를 얻는 포인터를 '따라'간다.

C언어의 형식이 자유롭기 때문에 다음과 같이 타입 바로 뒤에 *를 사용할 수 있다.

int* a;


이런 형식의 선언은 위에서 보았던 선언과 동일한 의미이면서도 a가 int 타입이라는 것을 더욱 더 분명하게 나타내준다. 그러나 이런 스타일의 선언은 좋지 않다. 다음 예를 보면 그 이유를 더욱 분명하게 알 수 있다.

int* b, c, d;


보통 이러한 선언을 보았을 때 b, c, d 모두 정수 포인터 변수라고 이해하지만, 실제로는 그렇지 않다. 그렇게 보이기 때문에 착각을 하는 경우인데, *b의 한부분이 포인터로 선언된 것이며, 나머지 c, d는 일반 정수 변수이다.

따라서 b, c, d 모두를 포인터 변수로 선언하려면 다음과 같이 선언하는 것이 정확하다.

int *b, *c, *d;

포인터 벼수 선언에서 변수의 초기값을 지정할 수 있다. 다음은 포인터를 선언하고 문자열 리터럴로 초기화하는 예를 보여준다.

char *message = "Hello World!";

이 문장은 message를 문자 포인터로 선언하고 문자열 리터럴의 첫 문장의 주소로 초기화했다. 하지만 이런식의 초기화는 한가지 위험요소를 가지고 있는데 의미를 잘못 해석할 수 있다는 것이다. 위의 선언은 다음과 같다.

char *message;
message = "Hello World!";




신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret
평소 C나 C++는 자주 사용하지 않지만 간혹 사용할 경우가 많아서 최근 개념을 다잡고자 "Pointers on C"라는 책을 읽고 있습니다.

Java의 경우 String이 지원되지만 C에서는 문자열 타입은 존재하지 않는다.
하지만 문자열 리터럴(String Literal)은 존재한다.

리터럴(Literal)이란 소스코드를 컴파일 할 경우 정의되어 있는 내용을 그대로 정확하게 해석할 수 있어야 하는 값이다.

만약 소스코드에 int x = 12; 라고 정의하였다면 "x"는 변수이며 "12"가 리터럴이다.
중요한 것은 리터럴은 명칭이 아니고 값 그 자체를 의미한다.

char *message = "Hello World";

여기서 "Hello World"가 리터럴이 된다.
문자열이나 숫자와 같은 값들이 모두 리터럴이라는 것은 인식하자.

이에 관한 자세한 내역은 http://www.gavilan.edu/csis/languages/literals.html 를 참고하기 바란다.

사실 C에서 문자열(string)은 NUL 바이트로 끊나는 0개 이상의 문자를 말하며 이 문자열은 대부분 문자 배열로 저장된다. 따라서 특별하게 문자열 타입이라는 것이 따로 존재하지 앟는다.

NUL이 문자열의 종료를 나타내는데 사용되기 때문에, 문자열은 반드시 하나의 NUL을 포함하여야 한다.
이렇게 NUL이 문자열의 종결자(terminator)로 사용될 수 있는 이유는 대부분의 문자열 처리에서 NUL이 별로 무제되지 않으며, 문자열 출력과도 상관없기 때문이다.

문자열 리터럴은 일련의 문자들을 다음과 같이 인용부호로 묶어서 작성한다.

"Hello World"; // 조금은 지겹기도 합니다. :)

신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글 하나 달렸습니다.
  1. 리터럴 문자열 검색해서 방문했네요. 정리해주신 내용이 공부에 도움이 많이 되었습니다. ^^
    감사합니다.
secret
평소 C나 C++는 자주 사용하지 않지만 간혹 사용할 경우가 많아서 최근 개념을 다잡고자 "Pointers on C"라는 책을 읽고 있습니다.

컴파일 과정은 학부때 거의 다 배워서 잘 알고 있는 내용이긴 하지만 책을 보면서 다시한번 정리하고 싶었다.


일반적인 C나 C++의 컴파일 과정을 보여줍니다.



상기 그림은 Visual C++와 같이 Windows GUI를 포함하여야 하는 경우에 컴파일 과정입니다.
특이하게도 Resource Compiler가 같이 있는데, Resource Compiler는 아이콘이나 다이얼로그 박스 및 다른 그래픽 객체 등을 Compiled Resource Files로 Linker에 링킹시킵니다.

이를 통하여 각종 Event-Driven Model에 필요한 GUI를 사용자에게 제공할 수 있습니다.

이점은 조금 색다르게 느끼실 것입니다.


상기 그림은 델파이(Delphi)의 컴파일 과정입니다. 보통 Delphi의 경우 IDE를 활용하기 때문에 이러한 컴파일 절차를 정확하게 인식하지 못할 경우가 있습니다.

참고자료는 http://www.codexterity.com/raw-delphi/index.htm 입니다.

신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  3개가 달렸습니다.
  1. 좋은 정보 감사합니다 ^^
  2. 오호, 깔끔한 도표 잘 보고 갑니다^_^~
secret
평소 C나 C++는 자주 사용하지 않지만 간혹 사용할 경우가 많아서 최근 개념을 다잡고자 "Pointers on C"라는 책을 읽고 있습니다.

책 내용중 기본 개념에 해당하는 ANSI C 호환 컴파일러의 환경에 대한 좋은 글이 있어서 올립니다.

모든 ANSI C 호환 컴파일러는 두개의 서로 다른 환경(Environment)이 존재한다.

1. 번역 환경 (Translation Environment): 소스코드를 실행 가능한 기계어로 번역하는 환경
2. 실행 환경 (Execution Environment): 코드를 실제로 실행하는 환경

이 두 환경은 모두 하나의 동일한 컴퓨터에 존재할 필요가 없다.
특히 다른 CPU나 운영체제를 사용하는 경우 번역환경과 실행 환경은 서로 상이할 수 있다.

예를 들어 Windows XP를 사용하는 개발자가 UNIX에서 돌아가는 C 프로그램을 작성한다고 하면 번역환경은 Windows XP를 사용하는 개발자의 컴퓨터이고 실행환경은 UNIX 머신이다.

이를 위하여 크로스 컴파일러(Cross Compiler)가 존재하여 현재 자신이 실행되는 컴퓨터에서 그와 다른 컴퓨터에서 실행될 수 있는 실행코드를 만들어 낼 수 있다. 이 경우 번역환경은 존재하지만 실행환경은 존재하지 않는다.

또한 환경에 따라 운영체제가 필요하지 않을 수 있다.

운영체제가 없는 환경을 프리스탠딩 환경(Freestanding Environment)라고 하는데, 전자랜지와 같은 임베디드 시스템에서 볼 수 있다.







신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글  2개가 달렸습니다.
  1. 비밀댓글입니다
    • 안녕하세요~ :-)

      우선 ANSI는 American National Standdards Institute라는 용어의 약자입니다.

      즉 ANSI는 미국의 표준화를 위한 단체입니다.

      이 단체에서는 광범위한 표준화를 진행하고 있는데 그중 컴퓨터의 언어(Language)인 C도 표준화하였습니다.

      왜냐하면 C는 자생적인 컴퓨터 언어이고 수 많은 라이브러리들이 존재하기 때문에 입니다.

      이에따라 ANSI C라고 하면 ANSI에서 표준화시킨 C라는 뜻입니다.

      이 왜에도 ISO C라는 것도 있습니다.

      더욱 자세한 정보는 http://en.wikipedia.org/wiki/ANSI_C 에서 찾아보실 수 있습니다.

      혹시 살펴보시다가 궁금한 것이 있다면 저에게 메일 주시기 바랍니다.

      결론적으로 ANSI C는 미국에서 만든 표준 C 언어입니다.

      이에 관한 좋은 책으로는 프라임 C라는 책을 권해드립니다.

      제 기억에 ANSI C를 기준으로 쓰여졌던것으로 알고 있습니다.

      그럼 좋은 하루 보내세요 ;-)
secret
C 프로그래밍은 자주 하지 않기 때문에 간혹 형식 지정자가 생각나지 않을 경우가 많다.
간단하게 "Pointers on C"책에 있는 내용을 토대로 형식 지정자를 정리하였다.

1. printf에서 사용하는 형식 지정자
형식
 의미
 %d  10 진수 출력 
 %o  8 진수 출력
 %x  16 진수 출력
 %g  부동소수점 수 출력
 %c  문자 출력
 %s  문자열 출력
 \n  개행 문자 출력



2. scanf에서 사용되는 형식 지정자
 형식  의미  변수 형식
 %d  정수값을 읽는다.
 int
 %ld  long 타입 정수를 읽는다.
 long
 %f  부동소수점 수를 읽는다.
 float
 %lf  double 타입 실수값을 읽는다.
 double
 %c  문자를 읽는다.
 char
 %s  입력으로부터 문자열을 읽는다.
 char arrary




신고

WRITTEN BY
jangsunjin
전세계 사람들의 삶의 질을 높일 수 있는 소프트웨어를 만들어 함께 나누는 것이 꿈입니다. 이 세상 그 무엇보다 사람이 가장 소중합니다.

받은 트랙백이 없고 , 댓글이 없습니다.
secret