2.8 Layout of a C Program

우리는 C 프로그램을 토큰의 집합으로 생각할 수 있다. 토큰은 의미를 바꾸지 않고는 나눌수 없는 캐릭터들의 그룹을 의미하며, 식별자와 키워드가 포함된다. +나 -와 같은 연산자, 쉼표, 세미콜론, 리터럴 문자열 같은 문장부호도 포함된다. 예를 들어서 다음 statement에는 7개의 토큰이 존재한다.

 

printf("Height : %d\n, height);
printf     (     "Height : %d\n     ,      height      )         ; 
  ①        ②              ③         ④         ⑤        ⑥         ⑦

토큰 는 식별자이고, 토큰 은 리터럴문자열, , , 토큰과 은 문장부호이다.

대부분의 경우 프로그램에서 토큰 사이의 공간은 중요하지 않다. 극단적으로, 토큰끼리 공간이 아예 없이 합쳐질수도 있다. (두 토큰이 합쳐져 제 3의 토큰이 되는 경우는 제외한다.) 예를 들어, 2.6장의 celsius.c 프로그램에서 대부분의 공간을 삭제할 수 있다. int와 main, float과 fahrenheit같은 토큰은 공백을 제공하고 대부분 공백을 지우는 것이 가능하다.

/* Converts a Fahrenheit temperature to Celsius */
#include <stdio.h>
#define FREEZING_PT 32.0f
#define SCALE_FACTOR (5.0f/9.0f)
int main(void){float fahrenheit,celsius;printf(
"Enter Fahrenheit temperature:");scanf("%f", &fahrenheit);
celsius=(fahrenheit-FREEZING_PT)*SCALE_FACTOR;
printf("Celsius equivalent: %.1f\n", celsius);return 0;}

사실, 페이지가 더 넓다면, 우리는 전체 main함수를 한줄에 놓을수 있다. 하지만, 프로그램 전체를 한 줄에 놓을수는 없다. 각 전처리문은 별도의 줄을 요구하기 때문이다. 이런식으로 프로그램을 압축하는 것은 좋지 않다. 오히려, 프로그램에 공백과 빈 줄을 추가하면 읽고 이해하는 것이 더 쉬워질 수 있다. 다행히도, C는 공백, 탭키, 개행문자를 토큰 사이에 무제한으로 넣을 수 있게한다. 이런 규칙은 프로그램 레이아웃을 위한 몇가지 중요한 결과를 갖게된다. 

  • statement는 여러줄에 걸쳐 나눠질수 있다. 예를 들어 다음 statement는 너무 길기 때문에 한줄에 끼워넣기가 어렵다. 
printf("Dimensional weight (pounds) : %d\n",
  (volume + INCHES_PER_POUND -1)/ INCHES_PER_POUND);
  • 토큰 사이의 공간은 눈이 토큰을 직관적으로 분리할수 있도록 한다. 이런 이유로, 연산자 앞뒤로 공백을 두기도한다.
volume = height * length * width
  • 또한 각 쉼표 뒤에 공백을 넣는다. 어떤 프로그래머들은 심지어, 괄호나 문장기호 주변에 공백을 넣기도 한다.
  • Indentation

+ Recent posts