1. Getting Started

Takeaway A. C와 C++은 다른 언어이다. 둘을 섞지 말라.

Takeaway B. 겁먹지 말라.

1.1. Imperative programming.

Takeaway 0.1.1.1. C는 명령형 프로그래밍 언어이다.

#include <stdlib.h>
#include <stdio.h>

/* The main thing that this program does. */
int main(void) {
  // Declarations
  double A[5] = {
    [0] = 9.0,
    [1] = 2.9,
    [4] = 3.E+25,
    [3] = .00007,
  };

  // Doing some work
  for (size_t i = 0; i < 5; ++i) {
     printf("element %zu is %g, \tits square is %g\n",
            i,
            A[i],
            A[i]*A[i]);
  }

  return EXIT_SUCCESS;
}

프로그램 1.1은 따옴표 안의 라인을 출력한다. C는 이를 명령문을 통해 실행시킨다. 이는 printf 함수에 대한 호출을 통해 이루어진다. 이 때 printf 함수는 4개의 인자를 받는데, 이는 괄호로 묶여 있다.

따옴표 안의 텍스트는 문자열 리터럴로써 출력의 포맷이 된다. 텍스트 안에는 포맷 규제자가 존재하여 출력 시에 나머지 인자들의 숫자가 대입된다. 포맷에는 백슬래시로 시작하는 확장 문자 \t나 \n 등이 존재한다. 이 프로그램의 동작을 맡는 부분은 printf이며 나머지는 어느 숫자가 출력될지, 얼마나 많은 숫자가 출력될지 등을 결정하는 향신료일 뿐이다.

1.2. Compiling and Running.

컴파일러라는 특별한 프로그램은 C 텍스트를 기계가 이해할 수 있는 이진 코드실행 파일로 번역시킨다.

Takeaway 0.1.2.1. C는 컴파일되는 프로그래밍 언어이다.

컴파일러의 이름이나 그를 작동시키는 인자들은 프로그램을 구동하는 플랫폼에 의존한다. 그것이 C가 존재하는 이유다. C는 서로 다른 기계에 의존하는 언어 (어셈블러)에 대한 추상화 층을 제공해준다.

Takeaway 0.1.2.2. 올바른 C 프로그램은 서로 다른 플랫폼간 호환 가능하다.

컴파일러를 실행하는 커맨드 라인의 -o 옵션 뒤의 파일명은 컴파일러 아웃풋을 해당 파일로 저장하라는 의미이다. 뒤의 인자는 소스 파일, 우리가 쓴 C 코드가 담긴 파일이다. 이후에는 만들어진 실행 파일실행하면 된다. 올바른 C 프로그램은 포터블하다. 즉, 프로그램을 실행시켰을 때, 어디서 실행하든 그 동작이 같다.

컴파일 명령이 작동하지 않는다면 컴파일러의 이름을 눈여겨보아라. 좋지 않은 프로그램을 컴파일하면 컴파일러가 진단 정보를 준다. clang의 진단 정보는 gcc보다 더 쓸만하다.

Takeaway 0.1.2.3. C 프로그램은 경고문 없이 컴파일되어야 한다.

요점 정리

  • C는 컴퓨터에게 명령을 내리기 위해 설계되었다. 그렇게 함으로써 프로그래머와 컴퓨터를 중개한다.
  • C는 실행 전 컴파일되어야 한다. 컴파일러는 우리가 이해하는 언어 (C)를 특정 플랫폼에 맞게 번역시킨다.
  • C는 호환성을 가져다주는 추상화 층을 제공한다. 하나의 C 프로그램은 여러 다른 컴퓨터 아키텍쳐에서 사용될 수 있다.
  • C 컴파일러는 당신을 돕기 위해 존재한다. 컴파일러가 프로그램에 대해 경고를 하면, 그 경고를 들어라.