10 + 20 = 30




위와 같은 결과가 나오도록  코딩하시오.

(언제나 그러하듯 정답은 위의 결과물이 나오기만 하면 정답)



#define문을 이용하여 심볼릭 상수를 만드는 방법.


<예제>

01: #include <stdio.h>

02:

03: #define PI 3.14

04: #define NUM 100

05: #define BUFFER_SIZE 200

06:

07: int main()

08: {

09: printf("%lf \n", PI);

10: printf("%d \n", NUM);

11: printf("%d \n", BUFFER_SIZE);

12:

13: return 0;

14: }




03행부터 05행까지 #define 문은 전처리기에서 수행되는 문장이다.

전처리기란 컴파일러가 소스파일을 컴파일하기 전에 먼저 이루어지는 과정으로,


위의 코딩에서 보여지듯이

#define 문은 프로그램에서 여러번 사용되는 상수값을 

매크로상수로 정의해서 사용하게 한다.


그렇다면, 우리가 프로그램을 코딩할 때,

리터럴 상수대신에 심볼릭 상수를 사용하는 이유는 무엇일까?


3.14 라는 리터럴 실수형 상수가 프로그램에서 100번 사용되고 있다가

4.14 로 변경되어야 하는 경우에 우리는 할 수없이 지금까지 코딩해온 프로그램에서 사용한 3.14 라는 리터럴 상수를 100번 모두 수정해야하는 문제가 발생하게 된다.


이게, 얼마나 귀찮은 일인가?


만일, 3.14.와 같은 리터럴 실수형 상수를 심볼릭 상수로 정의해 놓았다면,

const 키워드나 #define 문의 선언문만 한번 고치면 일사천리이다.

이렇게 되면 프로그램 수정이 얼마나 간단하게 이루어지는지 체감하게 될 것이다.


<결과값>



다음의 예제를 통해서

const 키워드를 이용해 심볼릭상수를 만드는 방법에 관해 살펴보자.

심볼릭상수의 이름은 대문자로 표시하는 것이 좋다.



01: #include <stdio.h>

02: int main()

03: {

04: const int NUM = 100;                //심볼릭 상수의 선언과 동시에 초기화

05: const double PT = 3.14;             //심볼릭 상수의 선언과 동시에 초기화

06:

07: // NUM=200;

08: // PT=4.14;

09:

10: return 0;

11: }


04행과 05행에서

const 키워드를 이용하여 변수 NUM을 상수로 만들고, 변수 PI를 상수로 만들었다.

이제, 이때부터 100을 NUM이라고 쓰고, 3.14를 PI라고 대신 쓰면 된다.

이것이 바로 심볼릭 상수의 매력이다.


리터럴 상수를 의미있는 이름으로 심볼릭 상수화 시킨 것이다.


<주의>

심볼릭 상수를 만들 때 주의할 점이 있다.

바로 그것은 선언과 동시에 초기화를 해야한다는 것이다.

그렇게 하지 않으면 문제가 발생한다.

왜, 어째서 문제가 되는지 다음 예제를 통해서 공부해보자.



01: #include <stdio.h>

02: int main()

03: {

04: const int NUM;                        //심볼릭 상수의 선언

05: NUM = 100;                            //error 발생

06:

07: return 0;

08: }


04행에서 심볼릭 상수를 선언하고 초기화를 하지 않았다.

그리고 세미콜론; 을 통해 한 문장을 끝냈다.

여기서, 무엇이 문제일까?

바로 NUM을 초기화하지 않은 상태에서 심볼릭상수의 선언을 끝낸 것이다.

이것 때문에 심볼릭 상수는 아무런 의미가 없는 값이 상수화되어 버렸다.

05행에서 현재 NUM에는 아무 의미가 없는 값이 초기화되어서 심볼릭 상수가 되었기에

컴파일 에러가 발생했다.