#2. C언어의 기초, 기본구조

2009. 8. 18. 11:10STUDY !/배워보자 C언어


1  #include <stdio.h>
2
3   int main() {
4
5      printf("Hello World");
6      printf("\n");
7
8      return 0;
9   }
10

  C언어를 배울때 제일 처음접하게 되는 구문이다.
  세상에 태어난 기념으로 "Hello World"를 외치는 프로그램.
 
 처음부터 살펴보도록 하자.

1 # include <stdio.h>
  1번줄에 있는 include는 단어의 뜻 그대로 포함한다는 말이다. 무엇을 포함하는가? 바로 꺽쇠 안에 들어있는 stdio.h라는 파일이다. 이 파일을 왜 포함해야 하며 포함한다는 말의 의미는 무엇일까?

  컴퓨터는 굉장히 멍청하다. 내가 말해주는 것 외에는 아는것이 전혀 없다. 다시 말해서 세상에 갓 태어난 아이와 같다. 생각해보라. 이제 막 태어난 아이에게 "밥먹을까?"하면 고개 끄덕거리는 것을 본적이 있는가? 마찬가지다. 아직 아무것도 모르는 컴퓨터에게 "출력해라"라고 명령해봤자, 컴퓨터는 가만히 멍때리고 있을 뿐이다. 사람처럼 학습을 시키는 방법이 있지만, 스스로 학습및 진화가 불가능한 컴퓨터가 그런 일을 할 수 있다고 생각하지는 않겠지?
  그래서 강제적 지식주입을 위한 수술을 시도한다. 컴퓨터의 뇌에 잡다한 지식들을 집어 넣어 주는 것이다. 이것이 명령문 #include로 나타난다. 물론 작업의 효율을 위해, 컴퓨터의 머리에 넣어줄 지식들은 이미 생성되어 있는 상태이다. 본인은 VB2008을 쓰는데, 해당 프로그램의 폴더 내에 include라는 폴더가 있다. include라는 명령을 실행하면 바로 이 폴더에서 파일을 찾는다.
  갑자기 어떤 창조적인 사람이 이렇게 말한다. "나는 앞서 만들어진 내용들을 조합해서 나만의 지식을 만들어서 사용하고 싶다." 해도된다. 컴퓨터는 멍청하지만 컴퓨터를 만든 사람은 멍청하지 않다. 발전의 여지를 항상 남겨둔다. 그렇게 해서 MY.h라는 지식을 만들어서 솔루션 폴더(코드파일및 그와 관련된 파일들이 저장된곳)에 저장했다.
  앗! 그러고보니 include폴더에서 찾아다 쓴다고 하지 않았던가? 걱정하지 않아도 된다. <> 기호 대신에 " " 기호를 사용하면된다. #include "MY.h" 와 같이 쓰면 일단 솔루션 폴더에서 파일을 찾아본 후 없을 경우에 include폴더를 뒤진다. 따라서 "stdio.h"라고 써도 별 문제가 없다.
  여기까지 해서 포함하다라는 include문을 왜 사용하는 지는 의문이 풀렸을 것이다. 이제 stdio.h파일에 대해 알아보자. stdio 가 무슨 뜻일까. STanDard Input Output. 즉 표준입출력을 의미한다. 가장 기본적으로 컴퓨터와 대화할 수 있는 지식을 넣어준 것이다. 그럼 확장자 h는 뭘까? header 의 약자이다. 머리와 관련된 어떤 단어이겠지 하고 생각하면된다. 앞으로 컴퓨터에게 주입해줄 지식은 #include를 사용하면된다.
  여기서! 누군가 의문을 제기한다. #는 무엇인가? 뭘까? 뭐지? 흐으음?? 아! 바로 전처리기를 의미한다. 영어로는 preprocessor. 프리프로세서. 해석해볼까? 전처리기. 장난치나? ㅈㅅ. 설명하자면 본격적인 코딩이 시작되기에 앞서 무엇인가를 처리해 주는 것이다. 아까 한 얘기 또하게 됐지만, 멍청한 컴퓨터에게 기초적인 지식들과 규칙을 정해주는 것이다.

 3 int main() {
 8     return 0;
 9 }

  세번째 줄의 첫 단어 int. 어디서 많이 본거같지 않나? integer의 준말이다. 사전찾으면 정수형 이라고 나온다. 아니 정수형이라고나올지 정수라고 나올지는 나도 모르지만 중요한것은 정수를 의미한다는 것이다. 뒤에 나온 main은? 이름이다. ()는? 함수안에서 쓰일 매개변수(지금은 몰라도된다) 들이 정의되는 곳이다. (모든 함수에는 ()가 붙는다.) {}는? 함수의 범위를 나타낸다.
  다시 보자. 정수형태의 main이라는 이름을 갖는 함수가 선언되었다는 뜻이다. 괄호 안은 왜 비워뒀을까? 지금은 쓸일이 없기 때문이다. 나중에 다 사용할테니 벌써 급하게 뛰어가지 말자. 너무 휑하다고 생각되면 void라고 써줘도된다. void는 빈, 공허한 이란 뜻인지는 잘 모르겠고 '아무것도 아니다' 라는 의미이다. 지금 출현한  int와 void는 같은 부류에 속한다. 즉 void main()과 같이 사용해도된다는 것이다. 이외에도 long, float, double, char등 여러가지가 있지만 나중에 알아보자. 지금은 틀을 익히는것이 급하다.
  8번째 문장. return 0; 리턴한단다 리턴은 되돌려주다. 라는 의미이다. 즉 이 함수는 0을 되돌려줍니다. 라는 뜻이된다. 결론적으로 이 함수는 실행후에 아무것도 남기지 않고, 자기할일이 끝나면 사라진다. 이 문장은 왜 있을까? 나중에 함수부분에 가면 알게된다. 지금은 int형으로 시작했기 때문에 return 0;으로 끝난다고 알아두자. 한가지 더 말하자면 void형은 無형이므로 아무것도 돌려줄 필요가 없다.




이제 두줄 남았다.

5     printf("Hello World");
6    printf("\n");

  다섯번째줄에 나타난 printf();
함수이름이다. print 출력하다. f는... function정도 되려나 어쨌든 출력함수이다. 간단해졌다. Hello World를 출력하라. 그럼 다음줄에 있는 \n는 무엇일까? n은 New Line의 약자로 \n의 뜻은 새로운 줄에서 시작하겠다 라는 뜻이다. 즉 "한줄 내려가겠음"을 나타낸다.
  위와 같이, \와 영어 문자 하나로 이루어진 것을 제어문자라고 한다. 제어문자의 종류도 여러가지가 있다. 비프음을 출력하는 \a (알람이라는 단어겠지) 탭을 출력하는 \t (8칸 띈다라는 말이다.) 줄의 처음으로 돌아간다 라는 \r 등등등. C언어 학습용 책에 잘 설명되어 있다. 참고하길 바란다. 여기서 모든 것을 가르쳐 줄 수는 없다. 왜냐면 본인도 배우고 있기 때문에. 미안하다. 사실 다 쓰기 귀찮아서 그렇다 -_- ;;

  어쨌든 오늘은 C프로그래밍의 가장 기초적인 모양 혹은 틀에 대해서 알아보았다. 별로 한것도 없다고 생각된다면 printf()함수와 재미있게 놀아보기를 바란다.



아 하나 빼먹을 뻔 했군.
추가강의|

  컴퓨터는 문장이 끝났음을 인식하지 못한다. 우리가 아무리  Enter키로 줄을 바꿔도 컴퓨터는 모른다는 것이다. 결론적으로 아무 의미도 없다. 단지 컴퓨터 사용자 입장에서 보기편하기 위해서 Enter로 줄을 띄는 것 뿐이다. 안띄어도 된다! 아무 문제 없다.
그럼! 어떻게 컴퓨터에게 한 문장이 끝났음을 알려줄까? 계속 짜증나게 눈에 띄던 세미콜론(;) 이 그 역할을 한다. 한문장이 끝나면 반드시 세미콜론을 써줘야한다. 코딩 초기에는 이것때문에 발생하는 오류가 한가득이다. 참고하길바란다.
  하지만, 예외도 있으니... 그것은 전처리기! 전처리가 뭐냐고!? Preprocessor. 즉 #으로 시작하는 구문을 말한다. 1번 라인에서 ;이 쓰이지 않았음을 확인해 보자. 전처리기에서는 세미콜론이 쓰이지 않을 뿐 아니라, 띄어쓰기, 줄바꿈 또한 중요한 의미를 가진다. 참고하자. 전처리기는 프로그래밍에 대해 더 공부한 뒤, 프로그램의 개념을 확실히 이해할 때 쯤에 다시 설명하기로 한다.
 응용편
 3~9라인을 한줄에 써볼까?
int main() { printf("Hello World"); printf("\n"); return 0; }

직접 코딩해보고 결과를 확인한 후 감탄사를 한번씩 터뜨려주길 바란다.

추가강의 ||
  3번라인을 보자. int main() 여기에는 왜 세미콜론이 쓰이지 않았을까. 그 이유는 문장이 아직 덜 끝났기 때문이다. 바로 뒤에 따라오는 중괄호는 앞에 쓰인 함수에 종속되는 구문이다. (구문이 하나밖에 없다면 중괄호를 꼭 사용할 필요는 없다.)
  또 다른 예를 들어보겠다. 다음에 나오는 것은 for구문으로 나중에 배우게 될 반복 구문이다.
for( i = 0 ; i < n ; i++ )
  printf("a");
이 문장은 i가 0부터 1씩 증가하면서 n보다 작을 때까지 한번씩 a를 출력하는 구문이다. 다시말해 n이 10이라면 i가 0일때 한번, ~ i가 9일때 한번 해서 총 10번의 a가 출력된다. 그러나 for구문 바로 뒤에 세미콜론을 붙이게 되면, ( for( i = 0 ; i < n ; i++ ); ) for구문은 여기서 끝나게 되여 그냥 i가 n이 될때까지 증가한 뒤에 a라는 단어를 한번 출력하는 것이다. (위는 for문에 속하는 구문이 하나밖에 없기 때문에 중괄호를 생략했다.)
  따라서 세미콜론을 쓸 때는 문장이 확실히 끝났는지 확인해야 한다.


반응형

'STUDY ! > 배워보자 C언어' 카테고리의 다른 글

#6. 화면 입력함수  (0) 2009.08.24
#5. 화면 출력함수  (0) 2009.08.21
#4. 문장의 구성요소  (0) 2009.08.20
#3. C언어의 구성요소(1)  (0) 2009.08.19
#1. 진수법  (0) 2009.08.17