"One man's constant is another man's variable"
'누군가의 상수는 다른사람의 변수이다.'
– 앨런 펄리스(Alan J. Perlis)

이번 장에서는 최소한의 문법인 전처리기 지시문, 함수, 변수 및 statement를 포함한 몇 가지 기본 개념을 다룬다. 2.1에서는 간단한 C 프로그램을 제공하고 컴파일 및 링크하는 방법을 설명한다. 2.2에서는 프로그램을 일반화하는 방법에 대해 배우고, 2.3에서는 주석을 추가하는 방법을 보여줄 것이다. 2.4에서는 프로그램 실행중 변경될 수 있는 데이터를 저장하는 '변수'에 대해 소개하며, 2.5에서는 scanf 기능을 사용하여 데이터를 변수로 읽는 방법이 있다. 2.6에서는 프로그램 실행 중에 변경되지 않는 상수에 이름을 부여하는 것을 배우고, 2.7에서는 이름(식별자)를 만드는 C의 규칙을 설명하며, 2.8에서는 프로그램을 배치하기 위한 규칙을 제공한다.

2.1 Writing a Simple Program

다른 언어로 쓰인 프로그램과 달리, C 프로그램에는 "표준 문안"이 거의 필요하지 않으며 완전한 프로그램은 몇 줄밖에 안나올 정도로 짧을 수 있다.

Printing a Pun

Kernighan과 Ritchie의 고전, K&R책의 첫번째 프로그램은 매우 짧다. 바로 "hello, world"라는 단어를 쓰는 것이다. 그러나, 이 책에서는 다른 C프로그램 책 작가들과 달리 C의 고전 말장난을 사용할 것이다.

To C or not to C : that is the question.

다음 프로그램을 우리는 pun.c라고 부를 것이다.

#include <stdio.h>

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

2.2에서 더 자세히 다루겠지만, 우선 우리는 몇가지만 보기로 한다.

#include <stdio.h> 라는 문장은 C의 표준입출력 라이브러리에 대한 정보를 '포함'하는데 필요하다. 프로그램의 실행 가능한 코드는 메인 프로그램을 나타내는 main 내부에 들어간다. main 안의 코드는 원하는 메세지를 표시하게 하는 명령이다. printf는 표준입출력 라이브러리에서 제공하는 기능이며, 형식대로 출력을 할 수 있게 해준다. \n(백슬래시n)코드는 메세지를 출력한 후 다음 행으로 이동하도록 printf에게 지시하는 코드이다. 마지막의 return 0;은 프로그램이 종료될때 0값을 운영체제에 '반환'함을 나타낸다.

Compiling and Linking

짧은 내용임에도 pun.c를 동작하는 것은 생각보다 많은 것이 포함되어 있다.

먼저, 우리는 pun.c 라는 이름의 파일을 생성해야 한다. 파일의 이름은 중요하지 않지만, .c 확장자는 종종 컴파일러들에게 요구된다. 그리고 프로그램을 기계가 실행할 수 있는 형태로 변환해야 하는데, C프로그램의 경우 일반적으로 다음 세단계를 포함한다.

  • 전처리기. 프로그램은 먼저 지시라고 알려진 #으로 시작하는 명령을 전처리기에게 제공해야한다. 전처리기는 에디터와 비슷한데, 프로그램에 뭔가를 추가하고 수정할 수 있다.
  • 컴파일링. 수정된 프로그램은 이제 컴파일러로 이동하며, 컴파일러는 이를 기계명령(개체코드)으로 변환한다. 그러나 이 프로그램은 아직 실행준비가 되어있지 않은 상태이다.
  • 링킹. 마지막 단계에서 링커는 컴파일러에 의해 생성된 객체코드와 완전히 실행 가능한 프로그램을 만들어내는데 필요한 추가 코드를 결합한다. 이 추가 코드는 프로그램에서 사용되는 라이브러리 함수(ex: printf)를 포함한다.

다행히, 이 프로세스는 자동화되어있고, 보통 컴파일러와 통합되기 때문에 부담을 가지지 않아도 된다. 컴파일 및 링크에 필요한 명령은 컴파일러와 운영체제에 따라 다르다.  UNIX 아래에서 C컴파일러는 보통 cc로 이름이 붙는다. pun.c 프로그램을 컴파일하고 연결하기 위해 터미널 혹은 명령줄 창에 다음 명령을 입력한다.

%cc pun.c

(%는 UNIX 프롬프트이며, 입력하지 않아도 된다.) 링크는 cc를 사용할때 자동으로 수행되므로 별도의 링크 명령이 필요없다. 프로그램을 컴파일하고 연결한 후, cc는 실행 가능한 프로그램을 기본적으로 a.out이라는 파일에 남겨둔다. cc에는 여러 옵션이 있는데 그중 하나 -o옵션을 사용하면 실행 가능한 프로그램이 포함된 파일 이름을 선택할 수 있다. 예를 들어, pun.c의 실행 가능한 버전을 pun으로 명명하려면 다음명령을 입력한다.

%cc -o pun pun.c

가장 유명한 C컴파일러는 GCC 컴파일러인데, 이는 리눅스와 함께 제공되며, 많은 플랫폼에서도 사용가능하다. 이 컴파일러 사용법은 전통적인 UNIX CC 컴파일러를 사용하는 것과 유사하다. pun.c프로그램을 컴파일 하기 위해서는 다음과 같이 명령한다.

%gcc -o pun pun.c

Integrated Development Environment

IDE, 즉 통합개발환경에 대한 이야기이다. 지금까지는 운영체제에서 제공하는 특수 창에 명령을 입력하여 호출되는 "명령줄"컴파일러를 사용하는 것으로 가정했다. 대안책으로 IDE를 사용할 수 있는데, 이는 상태를 바꾸지 않고도 프로그램을 편집, 컴파일, 링크, 실행 및 디버그 할 수 있는 소프트웨어 패키지이다. IDE의 구성요소는 함께 작동할 수 있도록 설계되었다. 예를 들어 컴파일러가 프로그램에서 오류를 감지하면 에디터가 오류를 포함하는 줄을 강조하도록 정렬할 수 있다. 

 

+ Recent posts