심볼릭 상수
상수를 기호화하여 의미있는 이름으로 지어서 쓰는 상수를 의미
변수를 상수화 하는 것입니다.
심볼릭 상수를 만드는 방법은 크게 두 가지입니다. 첫째는 const 키워드를 이용하는 것이고
둘째는 매크로 상수를 이용하는 것 입니다.
1. const 키워드를 이용
다음 예제를 보며 알아보겠습니다.
#include <stdio.h>
int main(void)
{
const int NUM = 100;
const double PI = 3.14;
// NUM = 200;
// PI = 4.14;
return 0;
}
4,5행에서 const 키워드를 이용 , 변수 NUM, PI를 상수로 만들었습니다.
지금부터 100을 NUM, 3.14를 PI라고 대신 쓰면 됩니다.
7,8행 주석을 제거하고 컴파일을 하면 에러가 발생합니다.
NUM,PI는 심볼릭 상수로 선언하고 초기화 됐기 때문에 값을 변경할 수 없습니다.
// symbolic_const.c: In function 'main':
// symbolic_const.c:7:9: error: assignment of read-only variable 'NUM'
// NUM = 200;
// ^
// symbolic_const.c:8:8: error: assignment of read-only variable 'PI'
// PI = 4.14;
다음과 같은 에러코드가 나타난다.
심볼릭 상수를 만들 때 주의점은 선언과 동시에 초기화(값을 입력)를 해야합니다.
초기화 하지 않았을 때 왜 문제가 되는지 살펴보겠습니다.
#include <stdio.h>
int main(void)
{
const int NUM;
NUM = 100;
return 0;
}
4행에서 NUM을 심볼릭 상수로 선언하고 초기화는 하지 않았습니다. 이때 5행의 입력을 받진 않지만
의미없는 값을 상수로 가지고 있는 상태가 됩니다. 위 코드를 컴파일하면 당연히 에러가 발생합니다.
/* 심볼릭 상수를 선언하고 초기화는 하지 않음
현재 NUM은 아무 의미 없는 값이 상수화 됨. 따라서 컴파일 에러 발생 */
// symbolic_const_error.c: In function 'main':
// symbolic_const_error.c:5:9: error: assignment of read-only variable 'NUM'
// NUM = 100;
// ^
2. #define 문을 이용하기
#define 문을 이용해 다음과 같이 입력합니다.
#include <stdio.h>
#define PI 3.14 // 3 ~ 5행의 #define 문은 전처리기에서 수행되는 문장
#define NUM 100 // 컴파일러가 소스 파일을 컴파일 하기전에 먼저 수행
#define BUFFER_SIZE 200 // 프로그램에서 여러 번 사용되는 상수 값을 매크로 상수로 정의해서 사용
// 수정의 편의성 때문에 리터럴 상수가 아닌 심볼릭 상수를 사용함.
int main(void)
{
printf("%lf \n", PI);
printf("%d \n", NUM);
printf("%d \n", BUFFER_SIZE);
return 0;
}
전처리기는 컴파일러가 소스파일을 컴파일하기 전에 수행하는데
#define문은 전처리기에서 수행되는 문장입니다.
3. 심볼릭 상수를 왜 사용할까요??
리터럴 상수를 사용할 경우 프로그램 내에서 리터럴 상수 100번 사용할 경우 값이 변경될때 100번 수정해야하는 문제가 발생 합니다. 이러한 번거로움을 막기위해 심볼릭 상수를 사용합니다.
실수형 상수를 심볼릭 상수로 정의해두었다면 한 번의 수정으로 문제를 해결할 수 있습니다.
'IT > [C, C++]' 카테고리의 다른 글
[C] 포인터와 메모리 할당 개념 정리 (0) | 2022.02.17 |
---|---|
[C] 터미널에 한글 깨짐이 발생할 때 설정 방법 (win10, vscode 환경) (0) | 2022.01.22 |
[C] 증감 연산자: 전위 방식, 후위 방식 (0) | 2022.01.12 |