C언어에서 UB(Undefined Behavior) 의 수학적 구조

Jinhoon Yoon·2026년 9월 24일

C언어에서 UB 는 공허참 패턴이다.


진리표(Truth table)는 공리다: 인간이 합리적으로 생각하는 기준으로 정했다

P -> Q : 결과

T -> T : T [증명 패턴] ··· (1)
T -> F : F [반례 패턴] ··· (2)
F -> T : T [공허참 패턴] ··· (3)
F -> F : T [공허참 패턴] ··· (4)

수학에서는 오직 (1) 만 내용적 정보를 준다.
(3)과 (4)는 내용적 정보를 주지 않는다.

반증 불가능하면 과학이 아니다.
(3)과 (4)는 과학이 아니다.

공허참 패턴 예시

  • ex1: SF소설을 쓸 수 있다. 애시당초 뻥이기 때문.
  • ex2: 어떤 집합에 조건적으로 이름 지을 때, 공집합은 어떤 조건도 만족하지 않기에, 어떤 이름을 붙여도 항상 참이다.

C언어에서 UB 는 공허하게 참이다. 항상 참이다. 애시당초 뻥이기 때문.

C 언어 표준은 프로그래머와 컴파일러 사이의 거대한 조건 명제(P -> Q)로 이루어져 있다.

전제 P:
프로그래머는 유효하지 않은 메모리를 참조하지 않고, 오버플로우를 내지 않으며, 언어 규격을 엄격히 준수한다.
(대담한 선언이다. 왜냐면 꼼꼼한 수학자조차 실수를 하기 때문이다.)

결론 Q:
컴파일러는 프로그래머의 의도대로 정확히 동작하는 기계어 코드를 생성한다.

우리가 기대하는 정상적인 프로그래밍 세계는 P가 참(T)인 세계다.
프로그래머가 규칙을 지켰으니(P = T),
컴파일러도 약속된 기계어를 안전하게 번역해낸다(Q = T).

프로그래머가 이미 해제된 스택 주소를 역참조하거나(Dangling Pointer),
유효하지 않은 메모리를 건드리는 순간,
전제 조건 P는 거짓(F)이 된다.

  • F -> T (컴파일러가 코드를 우연히 정상 작동시킴): 논리적으로 문제없음 (참).
  • F -> F (컴파일러가 프로그램을 강제 종료시키거나 하드디스크를 포맷함): 논리적으로 문제없음 (참).

C 언어에서 Undefined Behavior(UB)를 발생시키는 것은,
시스템의 전제가 깨져 어떤 헛소리를 해도 논리적으로 '참'이 되어버리는 공허참의 늪에 빠지는 것이다.

하드웨어는 항상 물리 법칙에 따라 특정 전압을 읽지만,
언어의 논리 체계 안에서는 이미 공리계가 붕괴되어 어떤 결과도 보장할 수 없게 된다.

0개의 댓글