본문 바로가기
~ 2024.03/C 언어

[C 언어 기초] C 프로그램의 구조

by Monett 2023. 12. 12.
반응형

K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.
현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 

#include <stdio.h>

int main(void)
{
    printf("To C, or not to C: that is the question.\n");
    
    return 0;
}

 

#include

는 C의 표준 입출력 라이브러리에 대한 정보를 첨가(include)하기 위해 필요한 줄이다.

 

프로그램에서 사실상 실행되는 코드는

main

에 존재하고, 말그대로 대표(main) 프로그램을 의미한다.

 

main 안에 유일한 명령어는 원하는 자료를 출력해주는 

printf

라는 함수이다.

 

printf는 표준 입출력 라이브러리(stdio. standard Input/Output)에 내장된 함수로, 데이터를 깔끔하게 출력해준다.

 

어록 뒤에 있는

\n

은 다음 줄로 넘긴다(개행)는 의미이다.

 

다음 줄인 

return 0;

은 프로그램이 종료될 때 운영체제에 0 이라는 값을 넘긴다, 혹은 반환(return)한다는 것을 의미한다.


컴파일과 링크

위 코드는 짧고 간결하지만, 실제로 실행하는 것은 생각보다 가벼운 일이 아니다.

 

  1. .c 확장자명을 가진 파일을 제작한다. 물론 위 프로그램 내용을 작성해야한다.
  2. 이 파일을 컴퓨터가 실행할 수 있는 형태로 만들어야 한다. C의 경우 보통 세 가지 과정이 필요하다.
    1. 전처리(Preprocessing). 프로그램은 우선 전처리기(Preprocessor)에 보내지는데, 전처리기는 #으로 시작하는 지시어(directive)로 알려진 줄들의 지시를 먼저 따른다.
    2. 컴파일(Compiling). 수정된 프로그램은 이제 컴파일러(Compiler)로 보내지는데, 여기서 우리가 작성한 코드가 기계어 명령문(목적 코드 - object code)으로 번역된다. 
    3. 링킹(Linking). 링커가 컴파일러에 의해 생성된 목적 코드를 프로그램을 실행하기 위해 필요한 추가적인 코드와 합친다. 보통 라이브러리 내부의 명령문을 의미한다. 위 코드에서는 printf가 되겠다.

다행히도 2번의 세 가지 과정은 전부 자동으로 처리가 된다.

 

작성자는 linux와 gcc를 이용하기에, gcc에서 컴파일하는 코드는 아래와 같다.

 

파일 이름이 pun.c 일때, 실행파일의 이름을 pun으로 설정할때를 가정한다.

-o는 gcc에 전달되는 옵션이며, 컴파일된 실행 파일의 이름을 지정할 수 있다.

$ gcc -o pun pun.c

간단한 프로그램의 일반적인 구조

간단한 C 프로그램은 다음과 같은 구조를 가진다.

*directives*

int main(void)
{
    *statements*
}

 

지시자 (directives)

지시자란 어떤 프로그램을 컴파일하기 전에 그 프로그램을 수정하는 명령문을 수정하는 것이다.

(Editing commands that modify the program prior to compilation)

 

지금 우리가 알고있는 지시자는

#include <stdio.h>

 이다.

 

이 줄은 <stdio.h>에 존재하는 정보들을 이 프로그램을 컴파일 하기 이전에 프로그램에 포함(include) 시켜야 한다는 의미가 있다.

 

C는 다른 언어들과 달리 읽거나 쓸 수 있는 기본 내장 함수가 없기 때문에 표준 입출력 라이브러리(standard input/output library)를 불러와서 사용해야 한다.

 

지시자는 언제나 #으로 시작해야 한다. 세미콜론은 붙지 않는다.

함수 (function)

함수란 main 함수처럼 이름이 있는 블록 형태 ( {로 시작하고 }로 끝난다 )로 이루어진 실행 가능한 코드다.

 

함수는 프로그램을 건설할 때 쓰이는 벽돌과도 같은 것이다.

C 프로그램은 이러한 벽돌들의 집합이라고 할 수 있을 것이다.

 

함수는 보통 두 가지로 나뉘는데, 하나는 프로그래머가 직접 제작한 함수이고, 다른 하나는 C에서 제공할 수 있는 함수이다.

 

수학과 다르게 C에서의 함수는 어떤 것은 값을 연산하고, 어떤 것은 연산하지 않는다.

값을 연산하는 함수는 반환문(return)을 사용하여 어떤 값을 반환하는지 명시한다.

 

main 함수는 값을 반환하는 함수이며, 프로그램이 종료될 때 운영체제에 상태코드(status code)를 반환한다.

int main(void)
{
	return 0;
}

 

int라는 단어가 main 직전에 나오는데, 이는 main 함수가 정수를 반환한다는 것을 의미한다.

void라는 단어는 main 함수가 입력값을 요구하지 않을 때 사용한다.

 

return 0;

위 구문은 두 가지 효과가 있는데, 첫 번째로 main 함수를 종료시키고, 두 번째로는 0이라는 값을 반환한다.

 

return 구문은 main 함수 마지막에 있지 않더라도 프로그램은 종료된다.

구문 (statement)

구문이란 프로그램이 실행될 때 실행되어야 할 명령문들이다.

 

C에서 각 구문은 반드시 세미콜론 (;)으로 끝나야 한다. 

세미콜론은 컴파일러가 구문이 어디서 끝나는지를 알려주는 역할을 한다.

반응형

'~ 2024.03 > C 언어' 카테고리의 다른 글

[C 언어 기초] 포인터  (0) 2023.12.13
[C 언어 기초] 선택문  (0) 2023.12.13
[C 언어 기초] 표현식  (0) 2023.12.13
[C 언어 기초] 서식 입출력  (0) 2023.12.12
[C 언어 기초] C 언어 개요  (1) 2023.12.12