Shinnara's Blog
Talking with Shinnara :: NaraTalk.com

'Computer/Programming/C/C++'에 해당되는 글 9건

  1. 2009/06/17 C Quiz (1)
  2. 2009/01/09 ANSI C 를 파싱하기 위한 Lex/Yacc 파일
  3. 2008/07/16 Splint :: Statically Checking C Programs
  4. 2007/11/22 C 프로그래밍 관련 유용한 자료 모음 (1)
  5. 2007/11/22 Make가 안된다면...
  6. 2007/11/21 mystery.c
  7. 2007/11/21 [UNIX-C] C/C++ Program Compilation
  8. 2007/11/21 C 다시 배우기
  9. 2007/10/27 Eclipse 에서 C/C++ 개발하기 (6)

C Quiz

Computer/Programming/C/C++ 2009/06/17 16:26 by Shinnara

머리가 아파 잠시 웹서핑 도중 발견한 재밌는 문제.
출처:  C Quiz

동아리를 떠들썩하게 만들었던(?) 퀴즈 !

int i, n=20;
for(i =0 ; i < n ; i--)
  printf("-");

위의 코드에서 딱 한 글자만 고쳐서 -가 20번 출력되게 해봅시다

위 홈페이지에서도 두가지 답을 제시하고 있는데요, 제가 생각한 답은 아래와 같습니다.

int i, n=20;
for(i =0 ; -i < n ; i--)
  printf("-");


한 글자를 추가한 것이라서 답이 안될려나요? 하여간 위와 같이 해도 20번의 -가 출력됩니다 ^^







이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, Quiz
0 Trackback, 1 Comment

TRACKBACK :: http://naratalk.com/trackback/314 관련글 쓰기

댓글을 달아 주세요

  1. test  댓글주소  수정/삭제  댓글쓰기

    i-- => n--

    2009/06/18 22:37


 요즘 계속해서 C 코드 파싱 문제를 다루고 있는데요, 그다지 큰 진척이 없다가 정통(?) 방식을 따르기로 마음먹고 Lex와 Yacc에 대한 공부를 해보았습니다. 뭐, 아직까지 제대로 알고 있지는 못하구요, 대강 어떻게 돌아가는 지, 문제가 생기면 어디쯤을 고쳐야 하는지에 대한 대략적인 감만 얻었다고나 할까요? 그래도 작업은 꽤 많이 진척되어서 C 코드에서 원하는 정보를 99% 얻어내고 있답니다. 이와 관련된 내용은 시간을 내어 정리하도록 하고, 오늘은 그 작업에 무지 무지 큰 도움이 된 정보를 소개하고자 합니다.

Lex 와 Yacc을 이용하기 위해서는 Lexical Specification 과 Grammar가 필요한 데요, 다음 링크에서 얻을 수 있습니다.

Lexical Specification
Yacc Grammar

꽤나 잘 정리가 되어 있습니다. 물론 곧바로 쓰기에는 약간 무리가 있는 부분도 있지만, 제가 원하던 작업에는 쉽게 적용이 가능했습니다.

C의 문법을 보면서 ANSI C의 표준에 대해 궁금해서 찾아봤는데, 좋은 자료가 있더군요.

Draft of the C99 standard (PDF)




이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/280 관련글 쓰기

댓글을 달아 주세요

 자칭 타칭 '소프트웨어 개발자'인 나에게 있어 프로그래밍은 관심의 대상이 아닐 수 없다. 또한 대학원에서 '소프트웨어 공학(Software Engineering)'을 전공한 나에게 프로젝트의 성공적인 수행, 문제가 적은 소프트웨어의 개발 등은 최대의 관심사가 되곤 한다.
 
  최근 들어 다시금 들여다보고 있는 분야 중에 하나가 Static Analysis 이다. 지금 수행하고 있는 프로젝트에서는  작성된 코드에 대해 Code Walkthrough( 모든 코드에 대해서 하는 건 아니지만), 테스트 자동화 도구를 이용한 Unit Test ( 임베디드 환경이라 도구 값이 장난이 아니다.), Verication Test 를 수행하고, 시험팀에 Delivery 를 마치고 나면 시험팀은 각 릴리즈별로 시험을 진행하게 된다. 이러한 과정을 거치면서 다양한 버그들이 발견되고, 수정되어 소프트웨어에 잔존하는 결함의 수는 나날이 줄어간다. 운영중 결함은 엄청난 파장을 일으키는 분야에서 일하고 있기 때문이기도 하지만, 소프트웨어의 결함을 줄이는 것에 많은 노력이 들어가곤 한다.
 이렇듯 많은 테스트를 진행하지만, 테스트는 테스트일 뿐. 소프트웨어 자체의 무결성을 증명하기는 어렵다. 소프트웨어 테스팅에서 항상 나오는 이야기다. '버그 없는 소프트웨어'는 존재할 수 없다는 혹자의 말처럼 Defect-Free 를 달성하기는 어렵겠지만, 그래도 그 결함의 가능성을 조금이나마 낮출수 있고, 그 노력이 그다지 힘들지 않다면 적용하고 싶은게 내 생각이다.
 
  얼마전 대전의 리베라 호텔에서 PolySpace 런칭 세미나가 있었다. MathWorks 가 PolySpace 를 인수하고, 2008년 본격적인 영업을 시작하기 위한 첫 행사였다. 이벤트의 성격이 강한지라, 프랑스의 엔지니어가 약 세시간에 걸쳐 프랑스 필이 강한 영어( Frenglish ?)로 Polyspace 에 대한 설명은 진행하였다. PolySpace 는 Static Analysis 를 통해 RunTime 에서 발생할 수 있는 에러를 사전에 검출하고자 하는 도구로, 꽤나 고가였다. 쉽사리 도입을 논하기 어려운 도구였는데, 그 세미나에서 얻은 것이 있다면 PolySpace 가 비교 대상으로 삼은 다양한 툴들에 대한 정보였다. 그중에 하나가 Lint.
 
 오늘 찾아본 자료는 Splint ( Secure Programming Lint : http://www.splint.org/ )이다. 아직 자세한 내용은 잘 모르겠지만, User's Manual 의 첫부분에 아래와 같은 설명이 나온다.


Splint is a tool for statically checking C programs for security vulnerabilities and programming mistakes. Splint does many of the traditional lint checks including unused declarations, type inconsistencies, use before definition, unreachable code, ignored return values, execution paths with no return, likely infinite loops, and fall through cases. More powerful checks are made possible by additional information given in source code annotations. Annotations are stylized comments that document assumptions about functions, variables, parameters and types. In addition to the checks specifically enabled by annotations, many of the traditional lint checks are improved by exploiting this additional information.

소스 코드에 존재하는 일명 Bad-Smell ( from 'Refactoring') 을 찾아 주며, Annotation을 이용해 좀더 강력한 검사를 수행할 수 있다고 한다.

Splint 를 사용해보기 위해, 테스트 머신인 Solaris 장비에 설치를 하였다. Splint 에서 SunOS 용 Binary 배포본을 지원하기 때문에 다운받아서 압축을 푸는 것 만으로도 설치를 수행할 수 있었다.

앞으로 Splint 를 사용하면서 얻게되는 다양한 정보를 함께 공유해보고자 한다.


p.s. binary 로 설치를 했어도 아래와 같이 환경변수를 설정해주어야 제대로 작동합니다.

export SPLINT_HOME=/home/hkshin/Programs/splint-3.1.1
export LARCH_PATH=$SPLINT_HOME/lib
export LCLIMPORTDIR=$SPLINT_HOME/imports


 

이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/248 관련글 쓰기

댓글을 달아 주세요


C / C++ 관련 자료에 대한 링크를 모아볼려고 합니다.

GDB를 이용한 디버깅
GDB 잘 쓰기




TAG c, c++, GDB
0 Trackback, 1 Comment

TRACKBACK :: http://naratalk.com/trackback/236 관련글 쓰기

댓글을 달아 주세요

  1. BlogIcon 아리새의펜촉  댓글주소  수정/삭제  댓글쓰기

    고맙습니다. CodeBlocks에서 GDB를 사용하는데 항상 막막했거든요.
    덕분에 이제 GDB와 친하게 될 것 같네요.

    2009/02/20 23:13


어제부터 C 관련 공부를 다시 하고 있습니다. Unix 환경에서 개발하다보니 make 는 필수입니다. Java 를 접하신 분이라면 Ant 와 비슷한 내용이라고 보시면 됩니다.

근데 이놈의 make 가 제대로 동작하지 않는 것입니다. port 설치 같은 것을 할 때는 잘만 되던것이, 제가 Makefile 을 작성하기만 하면 Need an operator 라고 하면서 에러가 나는 것입니다.

구글 검색을 통해 봤더니 gnu make를  쓰라는 말이 많아서 gmake 로 해도 마찬가지로 missingn separator 라는 에러메시지만을 표시할 뿐이었습니다.

Make 파일을 만들 때 가장 조심해야 하는 것이 명령 앞에 tab 키를 눌러주는 것입니다. 저 역시 vi 에서 편집을 할 때 tab 키를 이용해서 명령을 적었지요. 하도 안되어서 아주 간단한 것만 테스트를 해보았습니다.

[Makefile]
all :
    echo "hello"

이렇게 간단한 Makefile 마저 에러가 나버리니... ^^ 한참을 고민하다가 혹시나  vi 가 tab 을 공백으로 변환하는건 아닌가 하여 에디터를 바꾸어보았습니다. 대부분의 개발자들처럼 저도 auto indent 며 ts 등을 셋팅해놓았었지요.

그래서 바꾸어본 에디터가 pico.

동일한 내용을 입력하고나서 make 를 해봅니다.

[shinnara ~/work/freebsd-make]$ make
echo "hello"
hello


정말 오 마이 갓!입니다. 이것때문에 그렇게 골머리를 앓다니요..T.T

Makefile 을 작성했는데 제대로 안되시는 분들은 먼저 에디터부터 확인해보세요 ^^



이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/235 관련글 쓰기

댓글을 달아 주세요

mystery.c

Computer/Programming/C/C++ 2007/11/21 15:23 by Shinnara

UNIX-C 튜토리얼을 보다가 보게된 프로그램입니다.


#include <stdio.h>

main(t,_,a)
char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}


참으로 난해하게 보이는 코드입니다. 저렇게 코드를 짠다면 아마 무지 혼낼것 같습니다~ 하지만 조금만 들여다보면 어떻게 동작하는 지를 알수 있는 코드이기도 하지요.

다음은 실행 결과 입니다.

On the first day of Christmas my true love gave to me
a partridge in a pear tree.

On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.

On the third day of Christmas my true love gave to me
three french hens, two turtle doves
and a partridge in a pear tree.

On the fourth day of Christmas my true love gave to me
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the fifth day of Christmas my true love gave to me
five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the sixth day of Christmas my true love gave to me
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the seventh day of Christmas my true love gave to me
seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eighth day of Christmas my true love gave to me
eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the ninth day of Christmas my true love gave to me
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.

On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.


이해는 되지만, 그래도 신기하긴합니다 ^^




이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, mystery.c, unixc
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/232 관련글 쓰기

댓글을 달아 주세요


C를 다시 정복하고 싶은 제 마음을 적은 바 있는데요, 그래서 바로 시작을 했습니다. 환경은 FreeBSD 6.2, gcc 3.4.6 환경입니다.

앞선 포스팅에서 좋은 자료로 소개한 것 중에 Unix C 에 대한 자료로 일단 시작을 해보았는데, 거기에 있는 내용 중에 도움이 될 만한 자료들을 추려보려고 합니다. 특히 연습 문제를 위주로 하여 진행 하고자 합니다.

첫번째 내용이 C로 프로그래밍을 하여 컴파일하고 실행하는 것에 대한 내용입니다. 자세한 내용은 원본 문서를 확인해주시면 되구요.

연습문제를 풀어보도록 하겠습니다.

Exercise 12172

The following program uses the math library. Enter compile and run it correctly.

#include <math.h>

main()

{ int i;

printf("\t Number \t\t Square Root of Number\n\n");

for (i=0; i<=360; ++i)
printf("\t %d \t\t\t %d \n",i, sqrt((double) i));
}

위의 프로그램을 컴파일하고 제대로 실행하라는 문제군요. 라이브러리를 어떻게 쓰는지에 대한 문제입니다.

위의 내용대로 코드를 입력하고 컴파일을 해봅니다.

[shinnara ~/work/c/unixc]$ gcc exer12172.c
/var/tmp//ccEk6OYt.o(.text+0x4a): In function `main':
: undefined reference to `sqrt'
[shinnara ~/work/c/unixc]$

역시나 sqrt 가 정의되어 있지 않다고 나옵니다. -l 옵션을 붙여줘야 합니다.

[shinnara ~/work/c/unixc]$ gcc exer12172.c -lm
[shinnara ~/work/c/unixc]$

gcc 옵션과 관련된 자세한 내용은 Gcc 와 Make 강좌를 참조하시기 바랍니다.

컴파일이 제대로 되었으니, 이제 실행을 해봐야 할텐데요. a.out 이 디폴트로 생겼으니 실행을 해봅니다.

[shinnara ~/work/c/unixc]$ ./a.out
Number Square Root Of Number

0 0.00
1 1.00
2 1.41
...
353 18.79
354 18.81
355 18.84
356 18.87
357 18.89
358 18.92
359 18.95
360 18.97
[shinnara ~/work/c/unixc]$

그런데 실행된 모습이 다르다구요? 네, 맞습니다. 위의 프로그램을 조금 변경했습니다. 아래는 제 소스입니다.


[shinnara ~/work/c/unixc]$ cat exer12172.c
#include <math.h>

main()
{
int i;

printf("\t Number \t\t Square Root Of Number\n\n");

for(i=0;i<=360;i++)
printf("\t %d \t\t %.2f\n",i,sqrt((double) i ));
}
[shinnara ~/work/c/unixc]$


이제, 다들 제대로 동작하시죠?









이올린에 북마크하기(0) 이올린에 추천하기(0)
TAG c, compile, unixc
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/231 관련글 쓰기

댓글을 달아 주세요

C 다시 배우기

Computer/Programming/C/C++ 2007/11/21 14:11 by Shinnara

어려서부터 컴퓨터를 좋아했고, 프로그램도 많이 짜보았습니다. 프로그램을 짜기 위해 배우고, 또 써본 프로그래밍 언어의 종류가 꽤나 많은데, 지금와서 특별히 잘하는 게 별로 없는 것 같네요.

 제일 처음 접한 언어는 역시나 BASIC . 초등학교 2학년때부터 책을 통해서 거의 독학을 했지요. 그리고 초등학교 5학년때인가? Fortran 을 접했습니다. 지금 생각해보면 굉장히 까다로운 문법과 불편한 작업 환경이었지만, 그래도 무척 재밌었던 기억이 있습니다.
 
그리고는 중학교와 고등학교 시절 C를 접하게 되었고, 고등학교를 졸업할 무렵 Java 를 알게 되었습니다. 그 이후로 계속해서 Java 와 인연을 맺고 있구요. 대학시절에는 Scheme , Assembly, PHP, Visual C++, Visual Basic, Delphi 등 도 조금씩 써봤고, 최근에 들어서 Ruby 를 조금씩 익히고 있는 중입니다. 근데 Ruby 는 이상하게 저랑 친하지 않은 듯 합니다 ^^ 절실하지 않아서인지도 모르겠구요. 책 사놓은지가 벌써 몇달이 되어가는데 제대로 인사를 못하고 있네요. 그외에는 Groovy 도 써봤는데, 이걸 새로운 언어라고 해야할 지는 모르겠습니다 ^^

하여튼, 지금껏 꽤 많은 언어에 대해 공부해보고, 프로그램도 만들어왔는데, 최근 들어 느낀 것은 특히나 기본이 중요하다는 것입니다. 주로 Java를 이용해서 작업을 해왔고, 그쪽에 대해 Speciality 를 가지고 있었지만, C 에 대해 자신감이 좀 부족하다는 생각을 쭈욱 해왔습니다. 그러다가 며칠전 마이크로소프트의 NTO(? 정확한 직함이 맞는지는 모르겠네요. 전에 학교에 강연오셨을 때 들은 직함이라...) 이신 김명호 박사님의 프리젠테이션 자료를 보게 되었습니다. 거기에 있던 말이

"기초에 충실하라."

기본기를 강조하며, 남들이 잘 알고 있는것은 자신도 잘 알아야 한다는 이야기였습니다.  오늘 ZDNET 에 이에 대한 내용이 소개되기도 했습니다. 전산학과를 졸업하고 대학원에서 SE를 전공하면서, 전산학이며 프로그래밍에 대해서 기초는 충실하다고 생각합니다. 하지만 유독 C 에 대해서만은 자신이 없습니다. 제가 피해오기도 했지만, 또 쓸일이 없었기 때문이기도 하지요. 학부시절 프로그래밍 과제를 위해서, 프로젝트를 위해서 써본 것이 거의 전부입니다. 아, 대학원에 리눅스 관련 프로젝트를 할 때도 쓰기는 했네요..

그래서 이번 기회를 빌어 다시 한번 C를 정복해 볼까 합니다. 얼마전 Eclipse 에서 C/C++ 개발하기라는 주제로 개발환경 구축에 대한 글을 올렸었는데요, Eclipse 와 더불어 Unix 환경에서의 C 개발에 주력할 생각입니다.

정복에 있어 도움이 될 만한 자료를 찾아보고 있는데, 간단히 구글링을 통해서 얻은 자료 중에 괜찮은 것이 있어서 소개합니다.

Programming in C - Unix System calls and subroutines using C

C Tutorial

C Programming Tutorial

C야 기다리렴, 내가 간다 ^^


이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 0 Comment

TRACKBACK :: http://naratalk.com/trackback/230 관련글 쓰기

댓글을 달아 주세요

 조금 전에 스텔라리움이라는 오픈소스 천문 프로그램에 대한 소개글을 올렸습니다. 글에 써 있듯이 한글 문제로 인해 실행이 안되는 현상이 보였습니다. 그래서 오픈 소스인 만큼 소스를 받아서 고쳐볼까하는 생각을 하게 되었습니다. 평소에 Java 를 주된 개발 언어로 사용하다보니 C 와 관련된 툴은 거의 사용하지 않습니다. 이상하게도 저랑 C는, 특히 Visual C++ 은 별로 친하지 않더군요. 회사나 학교에서도 거의 Java 만 사용합니다.

 그런데 요즘 들어 오픈소스 커뮤니티에 대해 많은 관심을 가지게 되면서 C의 필요성을 크게 느끼고 있습니다. 그래서 예전 기억을 살려 다시금 C를 하려고 하는데, 그렇다고 Visual C++ 툴을 이용하고 싶지는 않았습니다. 평소에 자주 이용하는 Eclipse 를 개발툴로 정하고, Eclipse 에서 어떻게 하면 C를 사용할 수 있는 지를 알아보았습니다.

 Eclipse 의 홈페이지에 가보니 C 개발을 위한 CDT 라는 환경을 지원합니다. 특별히 다운받기 보다는 Eclipse 의 업데이트 과정을 통해서 설치를 할 수 가 있는데, 오늘자로볼 때 최신 CDT 버전은 4.0.1 입니다. (관련 페이지는 이곳 ) 그런데 4.0.x 는 Eclipse 3.3 이상에서 실행하도록 되어 있습니다. 제가 그동안 쓰고 있던 Eclipse 의 버전이 3.2 였던 관계로 이클립스를 다시 설치해야 했습니다. 오늘을 기준으로 최신 버전은 3.3.1.1 입니다.

설치를 하고나서, Eclipse Update 를 통해 CDT 를 설치합니다.  설치를 끝내면 다시 시작하라는 메시지가 나옵니다. Eclipse 를 다시 시작해 보니 다음과 같은 모습입니다.


사용자 삽입 이미지

사용자 삽입 이미지

Welcome 화면에 C/C++ Develpment 라는 항목이 생겨있네요.  File 메뉴에서도 C/C++ 을, Perspective 에서도 C/C++ 을 설정할 수 있습니다.

제대로 설치가 되었느지를 확인해보기 위해 helloworld.c 를 만들어보았습니다.

#include <stdio.h>

void main()
{
    printf("HelloWorld");
}

하도 오랫동안 C를 안써봤더니 이게 맞는 소스인지는 모르겠습니다. 별다른 메시지가 나타나지 않길래 Run 을 해보았습니다. 그런데 이게 왠일입니까? 다음과 같은 에러를 나타내며 실행이 안됩니다.

사용자 삽입 이미지

"Launch failed no binaries"
binary 가 없다면서 실행이 안되는다는 것입니다. 도대체 무슨 소린지... 그래서 CDT Help 를 찾아보았습니다.

C/C++ Development User Guide 의 가장 처음 문서 "Before you begin" 을 보니 다음과 같은 내용이 있습니다.

Windows

For windows, MinGW, and Cygwin are the two main choices for acquiring the GNU toolchain:

  • Cygwin is a port of the Linux environment to Windows. It provides a compatibility layer in a set of DLLs. These DLLs are GPL licensed, making any code that links to them also subject to the GPL. Cygwin, however, does provide the fullest implementation of the GNU toolchain by supporting the GNU libc C runtime library.


  • MinGW is a port of the GNU toolchain to the Windows platform. The biggest difference over Cygwin is that MinGW uses the Windows C runtime libraries (mscvrt) instead of GNU's libc. As a result, a compatibility layer is not required, thus avoiding the GPL issues with Cygwin. There are differences, though, between the Windows and GNU C runtime libraries that will make writing portable applications more difficult.

    However, MinGW provides the best integration support with the CDT due to it's direct support for the Windows environment.


    The following are instructions and links on how to install the current version of MinGW. Note that these links may become inaccurate over time as new versions of MinGW components are introduced. Please check the MinGW File Release section for the latest versions.


    1. Download and run the MinGW setup program, MinGW-5.1.3.exe.
    2. Select download and install the MinGW base tools and the g++ compiler. You may select the Current or Candidate version of these tools. You may also install any of the other available compilers as well.

      Do not install the MinGW Make feature as the MSYS version of make from step 5 is a more complete implementation of make.

    3. The MinGW setup program currently does not install the gdb debugger. To install the debugger, download the file from the following location: gdb-6.6.tar.bz2
    4. Extract the contents of the file gdb-6.6.tar.bz2 to the same location where you installed MinGW.
    5. If you want to use Makefile projects, download and run the setup program from the following location: MSYS-1.0.10.exe. MSYS provides an implementation of make and related command line tools. This is not required for other types of projects with the MinGW toolchain, which use CDT's internal build tools to perform the build

Windows 에서 CDT를 사용하기 위해서는 cygwin 이나 MinGW 가 필요하다는 것입니다. 그래서 MinGW 를 설치하였습니다.

MinGW 5.1.3 다운로드

저는 Automated MinGW Installer를 다운받아 실행했습니다. 설치를 하게되면 설치할 Component 를 선택하는 메뉴가 나오는데, 위의 설명에서와 같이 MinGW basetools 과 g++ compiler 를 선택합니다. 위의 설명에 보면 절대로 MinGW Make는 설치하지 말라고 나옵니다.

사용자 삽입 이미지

설치할 디렉토리를 선택하면 인스톨러가 설치 파일을 다운로드하여 설치를 해줍니다.

설치가 끝나면 디버거를 설치하는데요, 여기 에서 gdb-6.6.tar.bz2 를 다운받아 MinGW 의 설치디렉토리에 압축을 풉니다. 저의 경우, 몇몇 화일이 이미 존재한다고 나오길래 덮어썼습니다. ^^

Makefile 을 이용하기 위해서는 MSYS 를 설치합니다. 설치파일은 MSYS-1.0.10.exe

기본 설치가 끝나면 post-install 과정에서 mingw 의 설치 디렉토리를 d:/mingw 와 같은 형식으로 입력해줍니다.

그리고 나서 Eclipse 를 새로 시작하여 새 프로젝트를 생성해봅니다.

C Project 를 시작하려하니 오른쪽 toolchain 에 MinGW GCC 라는 것이 보입니다.

사용자 삽입 이미지

제대로 동작하는 지를 알아보기 위해 Hello World ANSI C Project 를 선택합니다.

Project Wizard 가 끝나고 나면 소스 코드를 볼 수 있는데 다음과 같이 바꿔보았습니다.

/*
 ============================================================================
 Name        : helloworld.c
 Author      : Shinnara
 Version     :
 Copyright   : It's Free
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts("Hello World! I'm Shinnara"); /* prints !!!Hello World!!! */
    return EXIT_SUCCESS;
}


Run 을 해보니 역시 제대로 동작하는 군요. 블로그에 올리기위해 이클립스를 프레임을 잔뜩 줄여봤는데 모습이 이상하군요. 어쨌든 제대로 동작하는 것을 확인할 수 있습니다.

사용자 삽입 이미지


이제 개발환경이 갖추어졌으니, 멋지게 개발하는 일만 남았네요. Eclipse, 참 좋은 개발 환경입니다 ^^



이올린에 북마크하기(0) 이올린에 추천하기(0)
0 Trackback, 6 Comment

TRACKBACK :: http://naratalk.com/trackback/204 관련글 쓰기

댓글을 달아 주세요

  1. BlogIcon 도막  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘 읽고 갑니다!! 근데 디버깅 하는 법을 잘 모르겠네요.
    비쥬얼스튜디오는 코드 따라서 디버깅 되는데 이건 변수 값만 변하는 것만 나오는 거 같아서요...

    혹시 저렇게 디버깅 되는게 맞나요?

    2008/08/07 16:10
  2. 루돌프  댓글주소  수정/삭제  댓글쓰기

    저도 주로 자바만 쓰다가, 비슷한 이유에서 오랜만에 C/C++를 사용해보려고 했는데..
    이상하게 visual C++ 은 사용하기가 싫더라구요. (이클립스 애용자입니다.)
    역시 같은 이유로 CDT를 다운받았는데, 같은 이유로 컴파일이 되지 않아 난감해하고 있었는데ㅠㅠ
    포스팅으로 큰 도움 얻고 갑니다!! 시간을 크게 절약하게 되었네요^^ 감사합니다!

    2009/06/16 09:35
  3. BlogIcon 두두리이  댓글주소  수정/삭제  댓글쓰기

    감사합니다 :)
    저는 원래 태생이 VS 인데
    근래 몇달간 java 쓰면서 Eclipse 만 쓰다가
    다시 VS로 돌아가려니 단축키가 손에 익지 않아 ;
    c/c++ 개발환경 골라보던 중 들렀답니다 ㅎ

    2009/06/16 16:51
  4. 지나가다  댓글주소  수정/삭제  댓글쓰기

    감사합니다.
    코멘트라도 달고가야 예의일듯해서 하시는일 대박나세요

    2009/07/16 14:29
  5.  댓글주소  수정/삭제  댓글쓰기

    비밀댓글 입니다

    2009/07/30 03:15
  6. BlogIcon 지돌스타  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 잘얻어갑니다. 감사합니다.

    2009/12/16 17:42

1 
다...... (251)
Computer/Programming (106)
Links (14)
책 읽는 즐거움 (6)
끄적임 (61)
즐거운 과학 나라 (7)
일본 (2)