2.2 The General Form of a Simple Program

pun.c에 대해서 깊게 알아보고, 이것을 일반화시켜보는 단원이다. C에는 다음과 같은 형식이 있다.

directives (전처리문)

int main(void)
{
  statements (명령문)
}

이 템플릿에서, 그리고 이 책의 다른곳에서 있는 유사한 템플릿에서는 Courier 체로 인쇄된 항목은 C 프로그램에서 보여준대로 정확히 등장해야하는 부분이다. Italics 체로 인쇄된 항목의 경우 프로그래머가 제공하는 텍스트를 나타낸다. (티스토리에서는 코드블록 사용시 폰트 적용이 안되기에, 필요한 경우 책을 참고하길 바란다.)

중괄호가 main 시작지점과 끝지점을 표시하는 방법에 주의해라. 다른 언어들이 begin 이나 end 를 쓰는 것처럼 C는 { 와 }를 사용한다. 이런 점에서 C에대한 일반적인 부분을 설명할 수 있다. 바로, C프로그램은 간결성 때문에 약어와 특수 기호에 크게 의존한다는 것이다. 

가장 간단한 C 프로그램도 다음 세가지 핵심 언어 기능에 의존한다. 전처리문(컴파일 전에 프로그램을 수정하는 명령 편집), 함수( main처럼 실행 가능한 코드의 함수명이 지어진 블록), 명령문(프로그램이 실행될 때 수행할 명령)

Directives 전처리문

C 프로그램은 컴파일되기 전에 전처리기에 의해 편집된다. 전처리기의 명령어를 전처리문이라고 한다. 14, 15장에서 깊게 배우겠지만, 지금은 #include 에 대해서만 배운다. pun.c 프로그램은 다음처럼 시작된다.

#include <stdio.h>

이 지시문은 <stdio.h>의 정보가 프로그램이 컴파일 되기 전에 포함됨을 명시한다. <stdio.h>에는 C의 표준입출력에 대한 정보가 포함되어있다. C는 <stdio.h>와 같은 헤더파일이 많은데 이는 각각 표준 라이브러리의 일부를 포함하고 있다. C에서 <stdio.h>를 포함해야하는 이유는, 다른 프로그래밍언어와는 다르게, '읽고 쓰는' 명령어가 내재되어있지 않기 때문이다. 대신, 입출력을 수행하도록 하는 능력은 표준라이브러리의 기능에 제공된다.

전처리문은 항상 C프로그램의 다른 항목과 구별되는 # 문자로 시작한다. 기본적으로 전처리문은 한줄 길이이며 전처리문 끝에는 세미콜론이나 다른 특수 문자가 없다.

Functions 함수

함수는 다른 프로그래밍 언어의 'procedures'나 'subroutines'와 같다. 그것들은 프로그램을 구성하는 블록을 쌓는 것이다. 사실상 C프로그램이 더 함수의 종류가 많다. 함수는 두 종류로 나뉘는데, 프로그래머가 직접쓴것과, C도구로 제공되는 것이다. 나중에 라이브러리 함수에서 언급하겠지만, '라이브러리'에 속해있는 함수이기때문에 컴파일러를 지원한다. 

 수학에서, 하나 이상의 인수가 주어졌을때 값을 계산하기 위한 규칙인 함수에서 이름을 따왔다.

C는 함수라는 용어를 더 확장시켰다. C에서 함수는 단순하게 "함께 그룹화되어 이름이 지정된 일련의 명령문"이다. 어떤 함수는 값을 계산하지만, 그렇지 않은 함수도 있다. 값을 계산하는 함수는 반환문을 사용하여 리턴값을 지정한다. 예를 들어 인수에 1을 더하는 함수는 다음과 같은 문장이 나온다.

return x+1;

서로 다른 인수의 제곱의 차를 계산하는 함수는 다음과 같은 문장으로 쓸 수 있다.

return y*y-z*z;

C 프로그램은 많은 함수로 구성될 수 있지만, main함수는 필수적으로 필요하다. main함수는 특별한데, 프로그램이 실행될 때 자동으로 호출된다는 점이다. 다른 함수에 대해 배우는 9장 전까지는 main함수가 프로그램에서 유일한 함수가 될것이다. 

main함수의 경우, 값을 반환하는가? 그렇다. 프로그램이 종료될 때 운영체제에 제공된 상태코드를 반환한다. pun.c 프로그램에서의 경우를 보자.

#include <stdio.h>

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

main함수 바로 앖의 int는 main함수가 정수값을 반환함을 뜻한다. 괄호 안의 void는 main에 인수가 없음을 뜻한다.

return 0;이란 문장은 두가지 기능이 있다. 프로그램을 종료하기 위해 main함수가 종료되도록 하고, main함수의 값이 0이 반환됨을 지시해준다. 나중에 main의 리턴값에 대해 알아보겠지만, 지금은 main은 프로그램을 종료하기 위해 항상 0을 리턴한다고 생각하자.

Statements 문장

문장은 프로그램이 동작할 때의 실행할 명령이다. 이 책의 5, 6장에서 자세히 살펴볼것이다. pun.c 프로그램은 딱 두종류의 문장을 사용하는데, 하나는 리턴문이고, 하나는 함수 호출이다. 할당된 작업을 수행하기 위해 함수를 요청하는 것은 함수 호출이라고 한다. 예를 들어 pun.c 프로그램은 printf함수를 호출하여 화면에 문자열을 표시한다.

printf("To C or not to C: that is the question.\n");

C는 각 문장이 세미콜론으로 끝나도록 요구한다. (단, 복합문에서는 예외이다.) 세미콜론은 컴퓨터에게 문장이 끝나는 점을 보여주기에 문장은 여러 줄에 걸쳐 작성해도 항상 끝나는 지점이 명백하다. 반면 전처리문은 한줄을 기본으로 쓰며, 세미콜론을 사용하지 않는다.

Printing Strings 문자열 출력

printf는 3장에서도 보겠지만, 강력한 함수이다. 지금까지는 큰따옴표로 묶인 문자열상수를 표시하는데만 printf를 사용했다. printf는 문자열 상수를 표시할 때 큰따옴표까지 화면에 보여주지는 않는다.

한번 출력이 되면, 다음 출력라인으로 자동으로 이동하지 않는다. printf에 한줄을 띄우도록 지시하려면 출력할 문자열에 \n(개행 문자)를 포함해야 한다. 개행문자를 작성하면 현재 출력하는 줄이 종료되고 다음 출력은 다음줄로 이동한다. 따라서 다음 두 코드는 같은 결과를 표시한다.

printf("To C or not to C: that is the question.\n");

printf("To C or not to C: ");
printf("that is the question.\n");

개행 문자는 문자열상수에 두번 이상 나타날 수 있는데, 다음 메세지를 코드로 작성하면 그다음과 같다.

Brevity is the soul of wit.
  --Shakespeare
printf("Brevity is the soul of wit.\n --Shakespeare\n);

+ Recent posts