티스토리 뷰



C언어를 본격적으로 시작하는 단계입니다. 우리가 영어를 배울 때 알파벳을 배우고, 주어 동사 목적어와 같은 언어의 구조를 배우듯이 C언어의 기본 구조에 대해서 알아보도록 하겠습니다.

   

여러분들이 C언어를 비롯한 다른 프로그래밍 언어를 처음 배울 때 주의 해야 할 사항은 C언어든 뭐든 프로그래밍 언어는 말 그대로 "언어"라는 것입니다. 언어라는 것은 그 나라 사람이 사용하는 말의 습관들이 담겨있기 때문에 C언어를 배우면서 억지로 이해하려고 하면 안되고 있는 그대로 받아들일 필요가 있습니다. 물론 나중에 고급 프로그래밍을 하기 위해서는 다 이해를 해야 하지만 처음 배울 때에는 있는 그대로 받아들이는 것이 좋습니다. 안 그러면 제대로 시작도 하기 전에 힘이 다 빠져버리니까요! 서론이 조금 길었네요. 그럼 본격적으로 시작하겠습니다.

   

그림 1 <문자열 출력 코드>

 

우선 컴파일러에 위 코드를 입력해주세요. 코드는 별거 없습니다. 콘솔에 Welcome to Programming World 라는 문자열을 출력해주는 코드에요. 이 구조가 가장 기본적인 C언어의 구조입니다. 무조건 C언어를 시작하면 이 코드는 일단 쓰고 시작하기 때문에 잘 알아두셔야 되고, 여러 번 쳐서 손가락에 익히셔야 되요. 마치 여러분들이 영타는 느리지만 naver를 치거나 아이디 비밀번호를 입력할 때의 속도가 되듯이!

 

그림 2 <c언어 구조>

 

1. #include <stdio.h>

코드에 제일 위에 있는 #include <stdio.h> 라는 부분은 전처리기(preprocessor)라고 부르는데 컴파일러가 컴파일하기 전에 처리하는 것을 말합니다. 전처리기 앞에는 #이 항상 붙어 있으며 항상 코드의 제일 상단에 있어야 컴파일이 정상적으로 됩니다. 전처리기의 종류에는 많은 것이 있지만 이번에는 include에 대해서 알아보려고 합니다. (실제로 다른 종류의 전처리기는 일반 교재에서도 한참 뒤에 설명하는 부분입니다.)

 

"include = 포함한다" 라는 뜻의 동사죠? 뜻 그대로 포함하겠다는 의미입니다. 무엇을? stdio.h 라는 헤더 파일을!

헤더 파일? - 헤더 파일은 쉽게 생각해서 함수들이 정의되어 있는 집합이라고 보면 됩니다. 예를 들어 stdio.h라는 헤더 파일에는 여러 가지 입력과 출력에 대한 함수들이 정의되어 있는데 대표적으로 위 코드에서 사용한 printf라는 함수입니다. 만약 stdio.h를 추가해주지 않았다면 printf를 사용할 수 없습니다. (※ 간혹 stdio.h를 추가하지 않아도 printf 등의 함수가 사용 가능 한 경우가 있는데 이는 컴파일러가 자동으로 추가를 해 준 것입니다. 만약 stdio.h를 추가하지 않아도 된다고 하더라도 앞으로 어떤 환경에서 프로그래밍을 하게 될 지 모르니 항상 추가하는 습관을 들이시기 바랍니다.)

 

2. int main(void) { }

이 코드는 main함수를 정의하는 코드입니다. main함수는 소스 코드에서 실제로 프로그램이 실행될 때 제일 처음 호출되는 함수로 프로그램이 실행되면 이 main 함수가 제일 먼저 실행이 됩니다. 그리고 이 main함수 안에서 여러 가지 함수가 호출되고 연산을 처리하죠. 그럼 이 형태에 대해 알아보도록 할까요?

 

int 함수의 반환형을 지정하는 자리입니다. 반환형이라는건 함수가 호출된 곳에 값을 전달하는 데이터의 형태를 말하는데 크게 정수형, 문자형, 실수형이 있습니다. int는 정수형을 나타내며 그 이외의 것들은 다음 장에서 알려 드리겠습니다. 지금은 여기까지만!

 

main 함수의 이름을 적는 부분입니다. 원래 함수의 이름은 사용자가 마음대로 지정할 수 있으나 main함수는 main이라는 이름으로 고정을 해 두어야 하며 소스 코드에 반드시 있어야 하는 함수입니다. 이름을 고정이 된 이유는 대부분의 프로그래밍 언어는 함수 단위로 컴파일을 하고, 실행을 하게 됩니다. 그런데 모든 함수의 이름을 사용자가 정의 해 버리면 어떤 함수를 가장 먼저 실행시켜야 하는지 컴퓨터가 모르기 때문에 제일 처음에 시작되는 함수의 이름을 main으로 고정해 두는 것 입니다.

 

(void) – () 이 괄호 안에는 함수에 전달되는 매개 변수를 정의하는 곳인데 지금은 void가 적혀 있죠. void는 비어 있다라는 의미로 굳이 쓰지 않아도 무방합니다. (보통은 다 안 써요.) 뭐 매개 변수라는 것은 함수로 전달되는 값을 저장하는 변수인데 아직은 모르셔도 상관없습니다.

 

{ } – 모든 함수는 이 중괄호로 시작해서 중괄호로 끝이 나며, 이 안에 소스 코드를 입력해야 합니다.

 

3.printf("Welcome to Programming World!\n");

여기부터는 본격적으로 코드를 쓰면 되는데 위 예제에서는 printf 라는 함수만을 사용하고 있습니다. printf함수는 괄호 안 큰따옴표 안에 있는 문자열을 모니터로 출력을 해주는 함수입니다. 그리고 끝에 '\n' 은 c언어에서 사용되는 특수 문자 중 하나로 개행 즉, 줄을 한 줄 아래로 띄워줍니다. 흔히 우리가 사용하는 Enter의 기능과 흡사하죠. 코드를 한 번 \n을 넣고 실행시켜 보고, \n을 빼고 실행 시켜서 차이를 한 번 확인 해 보세요. 그리고 정말 중요한 마지막에 ';(세미콜론)'한 줄의 끝을 의미합니다. 우리가 글을 쓸 때 한 문장이 끝나면 끝에 온점(.)을 찍어서 표시하듯이 프로그래밍 언어에서 세미콜론을 끝에 꼭 찍어 주어야 컴파일 에러가 뜨지 않습니다. 초보자들이 가장 실수하기 쉬운 부분이기 때문에 주의하시기 바랍니다. 이를 보아 한 줄에 한 개의 동작 밖에 못합니다. 꼭 유의해주세요!!

 

4.return 0;

함수가 반환형이 void가 아닌 이상 함수는 반듯이 자신을 호출해 준 곳에 어떤 값을 반환해야 합니다. return 0;는 0이라는 값을 반환하겠다는 의미입니다. 그런데 여기서 중요한 것은 다른 함수에서 return 구문은 앞에서 말한 것과 같이 값을 반환한다는 의미지만 main함수에서의 return 은 프로그램의 종료와 같은 말입니다. 왜냐하면 함수는 값을 반환하는 순간 함수가 종료 되 버리거든요!! 그런데 main함수가 끝나면 더 이상 진행할 것이 없기 때문에 프로그램이 종료되어 버리는 것입니다. 그러니 여러분들은 main 함수에서의 return 구문을 프로그램의 종료와 같다고 생각하시면 되는 거죠.

 

QnA

main 함수에 return을 안 쓰려면 어떻게 해야 되나요?

  • main함수를 정의하는 부분(int main(void))에서 int를 void로 바꿔 주시면 아래에 return 0;를 입력하지 않으셔도 됩니다. void는 말 그대로 반환형이 없다는 의미입니다. 하지만 가급적 int를 쓰시고 return 0;를 넣어서 코딩하시기 바랍니다. 저 return문이 의외로 활용도가 좋고, 나중에 함수에 대해서 공부할 때 도움이 많이 되실 꺼에요.

return 구문에서 0말고 다른 값을 넣어도 상관 없나요?

  • 사실 이런 질문은 하지 말고 직접 해보는 게 본인에게 도움이 많이 됩니다. 아직 뒷 글을 읽지 않으셨다면 그냥 직접 프로그래밍 해보고 마저 읽으세요. main함수에서 return구문은 프로그램의 종료를 위해 사용한다고 했습니다. 그렇기 때문에 어떤 값을 넣어도 상관 없습니다. 하지만 가급적이면 앞에서 선언한 반환형과 일치하는 값을 넣어 주는 것이 좋습니다. 이 부분은 나중에 함수 설명할 때 언급하도록 하겠습니다.

 

이렇게 고작 c언어의 기본 구조를 가지고 길게 풀어냈습니다. 그런데 여기 까지만 해도 c언어의 절반은 왔다고 보시면 됩니다. 그냥 하는 말이 아니고, 실제로 오늘 이 포스트에 1,2,3,4번에서 다룬 내용을 이용해서 앞으로의 과정이 모두 진행 됩니다. 여기서 이제 함수의 종류와 연산자, 변수의 종류 등의 내용이 추가되는 거죠. 오늘 한 내용을 모두 이해 못하셨더라도 '아! C언어는 처음에 저런 코드부터 시작하는구나' 정도만 되시면 됩니다. 나머지 설명은 앞으로도 계속해서 언급이 될 꺼에요. 이제 여러분은 저 예문이 손에 익을 때 까지 쳐 보시면 됩니다. 그리고 저기 나와 있는 정답 코드만 지루하게 쳐 볼 게 아니라 main의 이름을 바꿔도 보고 printf도 조금 변형 해 보면서 스스로 실험을 해보세요. 그러면서 에러 코드도 눈으로 직접 보고 많은 경험이 이 때 쌓입니다. 계속해서 궁금증을 가져 보세요! 그러면 프로그래밍이 재밌어질겁니다.

자료출처 - i2sec / 열혈강의c프로그래밍(윤성우)




올블로그추천버튼 블코추천버튼한RSS추가버튼 구글리더기추천버튼 FeedBurner구독하기  컴초모카페로

    글이 마음에 드셨다면 추천버튼 꾸욱! 블로그를 구독하고 싶으시다면 HanRSS, GoogleReader, FeedBurner 버튼을 꾸욱!



신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'##Programming > #C' 카테고리의 다른 글

[C언어] HelloWorld 를 분석해보자  (4) 2016.03.05
[C언어] C언어 진입장벽 부수기  (1) 2016.03.03
[C언어]1편 - C언어의 기본  (2) 2013.12.28
C언어란?  (7) 2013.02.05
[C언어]Visual C++ 사용법  (17) 2013.02.01
댓글
댓글쓰기 폼