프로그램 3-2-1에서 미터 단위를 인치 단위로 변환하는데 사용하는 팩터(factor) 39.37이나, 인치 단위를 피트 단위로 변환하는데 사용하는 팩터 12는 프로그램 내에서 그 값이 직접 명시되는 데이터이다.
또한 프로그램 3-7-1에서 세율을 나타내는 0.2도 그러하다. 이러한 데이터를
리터럴 데이터(literal data)라 한다.
리터럴 데이터를 프로그램 내에서 그대로 사용하는 것보다는 기호 형식의 이름을 붙여서 기호 상수로 사용하는 것이 프로그램의 이해를 높이고, 프로그램의 수정을 용이하게 한다.

1. #define

다음은 C 언어에서 기호 상수를 정의하는 형식이다.

 

#define 기호 값

위에서 기호는 리터럴 값에 대한 기호 상수로서 역할을 갖는다. 다음은 기호 상수를 정의하는 예이다.

 

 

#define inch_per_meter 39.37

#define inch_per_feet 12

#define tax 0.2

#define pi 3.14159 #define num_of_elts 100

프로그램 3-2-1프로그램 3-7-1을 리터럴 값 대신에 기호 상수를 사용하여 다음과 같이 수정할 수 있다. 프로그램 수정 전과 후에 프로그램의 의미에는 변함이 없다.

       
 

#include <stdio.h>
#define inch_per_meter 39.37
#define inch_per_feet 12
main()
{
       double meter, inch, feet;
       meter = 10;
       inch = inch_per_meter * meter;
       feet = inch / inch_per_feet;
       printf("%5.2fmeter -> %5.2ffeet\n", meter, feet);
}

 
            
     


       
 

#include <stdio.h>
#define tax 0.2
main()
{
       int hours;
       float rate, gross, net;
       scanf("%d%f", hours, rate);
       gross = rate*hours;
       net = gross - gross*tax;
       printf("Gross = %f\n", gross;
       printf("Net = %f\n", net);
}

 
            
     

위의 프로그램에서 보듯이, 기호 상수를 정의하는 #define 문은 보통 #include 문 다음에 위치하며, 프로그램 전체에 걸쳐서 그 효과를 갖는다. 리터럴 값에 그 의미를 나타내는 기호를 부여하여 사용함으로써 프로그램을 이해하기에 훨씬 쉬워진다는 것을 알 수 있다.

또한, 기호 상수의 값을 변경해야 할 경우에, 여러분은 #define 문에서 한번만 변경해도 그 효과는 프로그램 전체에 걸쳐서 반영된다.가령, 프로그램 3-7-1에서 tax의 값을 0.2에서 0.15로 변경해야 할 경우, 여러분은 #define 문에서 그 값을 한번만 변경하면 된다. 프로그램에서 tax를 여러 번 사용할 경우에 이 기호 상수의 값은 모두 함께 변경된다.

다음 창을 통해서 #define 문을 실습한다. (프로그램 3-2-1, 3-7-1을 입력하고 실행)

top으로... 다음페이지로.. 이전페이지로.. home으로..



2. 선행처리기

#define 문에서 정의된 기호 상수가 프로그램에서 사용되었을 경우에, 이러한 기호 상수들은 모두 프로그램이 컴파일되기 전에 값으로 대체된다. 이러한 과정은 선행처리기(preprocessor)에서 수행된다.

2주차 강의 1.2절에서 표준입출력 라이브러리에 관해서 살펴보았다. 미리 정의되어 있는 표준 입출력 함수를 사용하려면, 이러한 함수에 대한 정보를 포함하는 헤더 파일을 #include 문을 사용하여 포함시켜야 한다고 설명하였다.

선행처리기는 #define 문과 마찬가지로#include 문을 컴파일 전에 처리한다.즉, 선행처리기가 #include 문을 만나면, 명시된 헤더 파일의 복사본을 프로그램의 #include 문이 위치한 곳에 삽입한다. 다음은 선행처리기가 포함된 C 프로그램이 선행처리기, 컴파일러, 링커를 순차적으로 거쳐서 기계 코드로 번역하는 과정을 보여준다.


top으로... 이전페이지로.. home으로..

top으로... 다음페이지로.. 이전페이지로.. home으로..

top으로... 다음페이지로.. 이전페이지로.. home으로..

 

top으로... 다음페이지로.. 이전페이지로.. home으로..