#define은 상수를 이름으로 정의하거나 매크로 함수를 정의할 때 사용하는 전처리문이다. (전처리문이란 컴파일을 수행 하기 전 소스 코드를 변환시켜주는 명령어들을 말한다.) #define을 잘 활용하면 가독성이 향상된 프로그램을 만들 수 있고 프로그램을 수정하기에 효율적으로 작성할 수 있다. 기본 형식은 다음과 같다.
#define NAME VALUE |
NAME은 그 뒤에 있는 숫자를 대신해서 사용할 명칭이다. 맨 끝에 세미콜론(;)이 붙지 않음에 유의하자.
다음 예를 보자.
#include <stdio.h>#define PI 3.14 // PI를 3.14로 정의int main() {float fR = 3.0;printf("radius : %f\n", fR);printf("circumference : %f \n", 2*PI*fR);printf("area : %f \n", PI*fR*fR);printf("volume : %f \n", 4*PI*fR*fR*fR/3);} |
radius : 3.000000circumference : 18.840000area : 28.260000volume : 113.040000 |
두 번째 줄을 보면 다음과 같이 작성되어 있는데
#define PI 3.14 |
이것은 3.14라는 실수값을 PI라는 이름으로 사용하겠다는 정의이다. 실제로 프로그램상에서 printf()함수 안에서 사용되었다. 이 코드는 전처리기에 의해서 컴파일 전에 다음과 같이 내부적으로 수정된다.
printf("원의 둘레: %f \n", 2*3.14*fR);printf("원의 면적: %f \n", 3.14*fR*fR);printf("구의 체적: %f \n", 4*3.14*fR*fR*fR/3); |
따라서 처음부터 직접 위와 같이 작성하나 #define 문을 사용해서 PI라는 기호로 작성하나 내부적으로는 아무런 차이가 없다. 하지만 다른 사람이 볼 때 PI라는 ‘의미를 유추할 수 있는 기호’를 사용하는 것과 3.14라는 숫자를 직접 사용하는 것과는 차이가 있다.
더 큰 문제는 3.14라는 상수 값을 예를 들어 3.1415로 변경시켜야 할 경우가 발생했을 때이다. 위와 같이 프로그램했을 경우 세 곳을 모두 고쳐야 하지만 #define문을 사용한 경우에는 정의한 곳 한 곳만 고치고 다시 컴파일 해주면 된다. 이 예에는 세 곳이지만 프로그램이 길어진다면 수십 곳, 수백 곳이 될 수도 있을 것이다.
전술한 바와 같이 #define문으로 상수에 적절한 이름을 부여하는 것은 프로그램의 가독성 측면이나 수정의 용이함 등을 따질 때 그 활용도가 상당히 높다고 할 수 있다.
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C/C++ 의 typedef 명령어 (1) | 2015.05.24 |
---|---|
C/C++ printf()함수의 기본적인 사용법 (0) | 2015.05.24 |
C/C++의 구분 기호와 주석 (0) | 2015.05.24 |
1.9 식별자와 예약어 (0) | 2015.05.24 |
C++ 실습에 사용하는 무료 IDE 인 codelite 소개 (0) | 2015.05.24 |