본문 바로가기
강의/나 혼자 C언어 : 기초

만들면서 배우는 나 혼자 C언어 : 01. 기본 구조

by dongglessam 2022. 10. 26.
728x90
반응형
728x170

안녕하세요. 동글쌤 입니다.

프로그램 설치 후 C언어와 관련하여 처음 배울 것은 기본 구조 입니다. C언어와 관련된 많은 블로거들이 Hello World부터 찍는 입출력 함수부터 시작하는 경우가 많은데, 뜬금없이 기본 구조라니 이상하죠?

혹시 프로그램을 설치하지 않았다면 이전 글을 참고해서 설치해주시면 됩니다. 저는 이번 기초 강의에서 Dev-C++을 기본으로 사용합니다.

2022.10.25 - [나 혼자 C언어/C언어 기초] - 만들면서 배우는 나 혼자 C언어 : 프로그램 설치(Visual Studio 2022, Dev-C++, Replit)

 

만들면서 배우는 나 혼자 C언어 : 프로그램 설치(Visual Studio 2022, Dev-C++, Replit)

안녕하세요. 동글쌤 입니다. 이전부터 C언어와 관련된 강의를 해봐야지 해놓고선 미루고 미루고 미루다(...) 이제 시작해보려 합니다. 별로 안궁금해하실 수도 있고, 기존에 많은 분들이 올려놓

choisdevil.tistory.com

 

01. 기본 구조란?

 

글을 쓰기 위해선 '서론-본론-결론', 혹은 '기-승-전-결'과 같은 구조가 있듯이, C언어에도 코드를 구현할 때 지켜야 할 기본 구조가 존재합니다. 처음 시작할 때는 공식과도 같은 존재라고 생각하시면 됩니다.

 

// 01_main.c

#include <stdio.h>

int main(void) {
    /* 
    코드 구현
    ...
    */
    return 0;
}

가장 기본적인 구조는 위와 같은 형태로 이루어지게 되는데, 각 부분별로 설명을 드리겠습니다.

 

 

02. 전처리기(#)

 

 

#include <stdio.h>


요즘 친구들은 해시태그(#)로 더 익숙한 특수문자 인데요. 보통 # 이 붙는 명령어는 전처리기(Preprocessor)라고 합니다. 전처리기는 코드를 컴파일하기 전에 실행하는 부분입니다. include는 영어로 '포함하다' 라는 뜻인데, #include는 말 그대로 "코드를 컴파일 하기 전에 먼저 포함해줘!" 라고 생각하면 됩니다.

뒤에 나오는 <stdio.h>는 C에서 제공하는 기본 헤더 파일 중 하나인데, 표준 입출력(Standard Input/Output)과 관련된 기능을 제공하는 헤더파일이라고 생각하시면 됩니다.

헤더파일이란 사용자가 직접 함수 혹은 명령어의 기능을 정의할 수도 있지만 기본적으로 C 표준으로 제공하는 것들을 말하며, 입력과 출력을 비롯해 수많은 기능들이 이미 정의되어 있기 때문에 우리는 코드를 구현할 때 헤더파일을 #include로 '포함'시켜서 사용할 수 있게 됩니다.

대표적으로 다음 과정에서 배울 printf(), scanf() 등의 입출력 함수와 관련된 기능에 대한 정의가 stdio.h 헤더파일에 정의되어 있습니다. 우리는 컴퓨터에게 "입력은 이렇게 해서~~ 이렇게 하고~~ 이렇게 한다음에~~  화면에 출력해줘!" 라고 구구절절 정의하지 않아도 #include로 stdio.h 헤더파일만 포함시킨다면 입출력과 관련된 모든 기능을 사용할 수 있게 되는 것이죠.

 

#include <stdio.h>		// 시스템 정의 헤더파일

#include "myheader.h"		// 사용자 제작 헤더파일


<>로 사용하는 헤더파일은 시스템에서 기본적으로 제공하는 헤더파일(ex. stdio.h(표준입출력), string.h(문자열))을 정의할 때 사용하며, 사용자가 임의로 헤더파일을 만들 수도 있는데 이 경우에는 ""(쌍따옴표)로 정의하게 됩니다.

 

728x90

 

03. main 함수

 

int main(void) {
    /* 
    코드 구현
    ...
    */
}

main 함수에 대해 배우기 앞서 우선 '함수'라고 하는 것은 뭘까요? 흔히 중, 고등학생들에게 "함수가 뭐니?" 라고 물어보면 거의 80% 이상은 "그거 f(x) 할때 나오던데요?" 라고 얘기합니다. 

수학에서 말하는 함수는 '어떤 집합의 각 원소를 다른 어떤 집합의 유일한 원소에 대응(mapping)시키는 이항 관계이다.' 라고 정의하지만, C언어에서의 함수는 '최소한의 기능(function)을 구현하는 단위'로 이야기할 수 있습니다. 즉 가장 작은 단위의 기능을 구현하는 모듈로써 특정 동작을 수행하기 위한 일정 코드의 집합이라고 생각하면 됩니다.

C언어에서 함수를 구분하는 방법은 정말 쉬운데, 아래 코드를 보고 1, 2번 중 어떤 것이 함수일지 구분할 수 있는지 볼까요?

 

1. int printNotice1(void);

2. int printNotice2;

 

정답은 1번은 함수, 2번은 변수 입니다. 변수 또한 다음 단원에서 배우겠지만, 함수와 변수의 차이는 뒤에 소괄호()가 있는지 유무에 따라 달라지게 됩니다. 

함수의 구조 및 자세한 사용 방법은 후에 다시 다룰 예정이니, 우선은 int main(void)를 가지고 'main'이라고만 얘기하지 않고 'main 함수'라고 이야기하는 습관을 들여야 합니다. 보시다시피 main 뒤에 소괄호()가 있고, 즉 main()은 함수이기 때문이죠.

 

소스 코드에 main 함수가 없을 경우 오류가 발생한다.

하나의 프로그램에는 main 함수 뿐만 아니라 수많은 함수를 만들수 있습니다. 하지만 컴퓨터는 소스 코드를 컴파일할 때 제일 먼저 어떤 부분을 실행시켜야 할 지 모르는 상태입니다. 따라서 코드가 몇십 줄, 몇만 줄이던 간에 컴파일을 하면서 'main 함수'를 제일 먼저 실행시키는 것으로 약속을 했습니다. 그래야 프로그램이 실행되는 시작 지점을 알 수 있을 테니까요. 그래서 main 함수는 어떤 코드던 반드시 있어야 하고, 없을 경우 컴파일 오류가 발생합니다.

그럼 앞에 왜 int라는 것이 붙는지, 함수 괄호 안에는 void라는 것이 왜 붙는지 궁금할텐데, 이것은 나중에 함수 구조를 설명하면서 자세히 설명하는 것으로 하겠습니다. 지금은 그냥 공식처럼 알아만 두고, 중괄호( {} )를 가지고 main 함수가 실행될 범위를 알려준다 라는 것 정도만 알고 있으면 됩니다.

 

 

04. return 0;

 

main 함수의 안에는 여러분이 구현할 각종 코드가 들어가게 됩니다. return 0;은 main 함수에서 코드의 맨 마지막 부분에 쓰게 되는데, 여러분이 작성한 순서대로 코드가 실행된 뒤 맨 마지막에 return 0;이 실행되면서 프로그램이 종료되게 됩니다.

return 0;이라는 것은 두 가지 뜻이 있는데

1. (값의 반환 의미로) 정수 0 값을 반환한다.

2. (함수의 종료 의미로) 함수가 에러 없이 정상적으로 종료되었다.

main 함수의 끝에 있는 이 경우에는 두 번째 의미로 사용되며, main 함수를 에러 없이 정상적으로 종료한다는 의미의 명령어로 이해하시면 됩니다. 만약 0이 아닌 다른 값이 return(반환)된다면 에러가 있다는 의미로 이해하시면 됩니다.

또한 끝에 ;(세미콜론)을 붙이는 이유는 C언어에서는 전처리기, 함수 범위 등을 제외한 거의 모든 문장의 끝에 ;(세미콜론)을 붙여 해당 문장이 끝났음을 선언합니다. return 0 이라고만 쓴다면 컴퓨터는 0 뒤에 무언가 명령어가 더 있을것으로 예상하기 때문에 ;(세미콜론)을 붙여 명령어가 끝임을 알려주어야 합니다.

 

 

반응형

 

05. 정리한다면

 

위 내용을 정리한다면 코드를 아래와 같이 해석할 수 있습니다.

#include <stdio.h>	// 표준 입출력 기능이 정의된 헤더파일을 포함

int main(void) {	// main 함수 시작
    /* 
    코드 구현
    ...
    */
    
    return 0;	// main 함수 정상 종료
}	// main 함수 끝

 

코드 구현 부분은 실제로 여러분이 코드를 작성할 때 들어갈 부분이기 때문에 문장주석(/* */)으로 처리했지만, 이 외 부분은 당분간 여러분이 기본적으로 쳐놓고 시작해야 하는 구조라고 이해하시면 됩니다. 치기 귀찮으시면 복사해서라도 쓰시면서(...) 기본 구조로 이해하시면 됩니다.


다음 강의 : 02. 입출력 함수, 자료형과 변수 - 로그인 화면 제작

2022.10.28 - [강의/나 혼자 C언어 : 기초] - 만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수

 

만들면서 배우는 나 혼자 C언어 : 02. 입출력 함수, 자료형과 변수

안녕하세요. 동글쌤 입니다. 지난 강의에서 기본 구조에 대해 배웠으니 이제 우리가 실제로 만들 프로그램을 보면서 C언어의 주요 기능에 대해 배워보도록 하겠습니다. 01. 기본 구조 강의 : 2022.1

choisdevil.tistory.com

 

728x90
반응형
그리드형

댓글