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)한다는 것을 의미한다.
컴파일과 링크
위 코드는 짧고 간결하지만, 실제로 실행하는 것은 생각보다 가벼운 일이 아니다.
- .c 확장자명을 가진 파일을 제작한다. 물론 위 프로그램 내용을 작성해야한다.
- 이 파일을 컴퓨터가 실행할 수 있는 형태로 만들어야 한다. C의 경우 보통 세 가지 과정이 필요하다.
- 전처리(Preprocessing). 프로그램은 우선 전처리기(Preprocessor)에 보내지는데, 전처리기는 #으로 시작하는 지시어(directive)로 알려진 줄들의 지시를 먼저 따른다.
- 컴파일(Compiling). 수정된 프로그램은 이제 컴파일러(Compiler)로 보내지는데, 여기서 우리가 작성한 코드가 기계어 명령문(목적 코드 - object code)으로 번역된다.
- 링킹(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 |