C 언어에서는 const 키워드 또는 #define 전처리기 지시문을 사용하여 변수를 상수로 선언할 수 있습니다. 두 가지 방법 모두 프로그램 실행 중 값이 변경되지 않아야 하는 데이터를 안전하게 관리하는 데 유용합니다. 각각의 사용법과 특징을 자세히 살펴보겠습니다.
1. const 키워드
변수의 자료형 앞에 "const" 키워드를 붙이면 해당 변수를 상수로 선언할 수 있습니다. 상수 변수는 선언 시 단 한 번만 초기화할 수 있으며, 이후에는 값을 변경할 수 없습니다. 만약 초기화하지 않고 선언하면 기본값은 0으로 설정됩니다.
다음 예제는 const 키워드를 사용하여 C에서 상수 변수를 선언하고 출력하는 방법을 보여줍니다.
예제 코드
#include <stdio.h>
int main() {
const int a;
const int b = 12;
printf("The default value of variable a : %d", a);
printf("\nThe value of variable b : %d", b);
return 0;
}
위 프로그램의 실행 결과는 다음과 같습니다.
The default value of variable a : 0
The value of variable b : 12
실행 결과에서 확인할 수 있듯이, 초기화하지 않은 상수 변수 a는 기본값인 0을 가지며, 명시적으로 12로 초기화한 상수 변수 b는 해당 값을 그대로 유지합니다.
2. #define 전처리기 지시문
#define 전처리기 지시문은 특정 값에 대한 별칭(alias)을 선언하는 매크로입니다. 이를 활용하면 변수를 상수처럼 사용할 수 있습니다. #define으로 정의된 매크로는 컴파일 이전 단계(전처리 단계)에서 해당 이름이 지정된 값으로 단순히 치환됩니다.
다음 예제는 #define 전처리기 지시문을 사용하여 C에서 상수를 선언하는 방법을 보여줍니다.
예제 코드
#include <stdio.h>
#define num 25
int main() {
printf("The value of num is: %d", num);
return 0;
}
출력 결과
위 프로그램의 실행 결과는 다음과 같습니다.
The value of num is: 25
const와 #define의 차이점
두 방식 모두 상수를 만들 때 사용되지만, 동작 방식에는 중요한 차이가 있습니다.
- 자료형 검사: const는 실제 변수를 생성하므로 컴파일러가 자료형을 검사하지만, #define은 단순 텍스트 치환이므로 자료형 검사가 이루어지지 않습니다.
- 스코프(범위): const 변수는 일반 변수와 같은 스코프 규칙을 따르지만, #define 매크로는 정의된 이후 파일 전체에 영향을 미칩니다.
- 디버깅: const 변수는 디버거에서 값을 확인할 수 있지만, #define 매크로는 컴파일 전에 치환되므로 디버깅 시 매크로 이름 자체가 남지 않습니다.
따라서 타입 안정성과 디버깅 편의성이 중요하다면 const 키워드를 사용하는 것이 권장되며, 간단한 매크로 상수나 조건부 컴파일이 필요한 경우 #define을 활용하는 것이 좋습니다.