본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 071. division by zero in constant expression – 0으로 나누는 상수 표현식

by about_IT 2025. 4. 29.

이 오류는 상수 표현식에서 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이 되지 않도록 항상 체크하고, 필요시 조건부 분기로 안정성을 확보하는 것이 중요합니다.