이 오류는 상수 표현식에서 0으로 나누는 연산이 발생했을 때 발생합니다. C언어에서 상수 표현식은 컴파일 타임에 계산되며, 이때 0으로 나누는 시도가 있을 경우 컴파일러는 오류를 출력합니다. 이는 정의되지 않은 동작(undefined behavior)이기 때문에 엄격히 금지됩니다.
이 오류는 보통 #define
매크로나 enum
정의, 전역 상수 초기화 등에서 발생하며, 코드 실행 이전에 계산되는 값에서 문제가 됩니다.
● 오류 예제
#define DIVISOR 0
#define RESULT (10 / DIVISOR) // 오류: 0으로 나눔
int main() {
int x = RESULT;
return 0;
}
컴파일 시 다음과 같은 오류 메시지가 출력됩니다.
error: division by zero in constant expression
● 해결 방법
0으로 나누는 상황이 발생하지 않도록 상수 정의 시 주의하고, 분모 값이 0이 되는지를 반드시 확인해야 합니다. 조건부 매크로나 상수 값을 분기하는 방법도 고려할 수 있습니다.
#define DIVISOR 2
#define RESULT (10 / DIVISOR)
int main() {
int x = RESULT;
printf("%d\n", x);
return 0;
}
출력 결과:
5
● 실전 팁
- 상수 표현식에서 분모가 0이 되지 않도록 항상 확인하세요.
- 매크로나 enum 정의에 수학 연산을 포함할 경우 계산 결과를 철저히 검토하세요.
- 컴파일 타임 연산은 런타임처럼 디버깅이 어렵기 때문에 오류 발생 가능성에 더 주의해야 합니다.
컴파일 타임 상수에서의 0으로 나누기는 치명적인 오류이므로, 모든 계산에서 분모 값이 0이 되지 않도록 항상 체크하고, 필요시 조건부 분기로 안정성을 확보하는 것이 중요합니다.