피드로 돌아가기
C의 모든 것은 정의되지 않은 동작이다
GeekNewsGeekNews
Backend

C의 모든 것은 정의되지 않은 동작이다

C 언어 Undefined Behavior 방지를 위한 엄격한 타입 캐스팅 및 포맷팅 설계

neo2026년 5월 22일1intermediate

Context

C 언어의 가변 인자 함수 및 포맷 지정자 사용 시 타입 불일치로 인한 Undefined Behavior(UB) 발생 위험 존재. 컴파일러 수준에서 타입 체크가 누락되는 구조적 한계로 인해 런타임 예측 불가능성 증대.

Technical Solution

  • execl() 가변 인자 전달 시 NULL 매크로의 정수 해석 방지를 위한 (char*) 명시적 Casting 적용
  • printf() 포맷 지정자와 실제 인자 타입 일치를 통한 메모리 오독 및 UB 원천 차단
  • uint64_t 타입 출력 시 플랫폼 독립적 표준인 PRIu64 매크로 활용을 통한 이식성 확보
  • uid_t와 같은 가변 타입 출력 시 uintmax_t 캐스팅과 PRIuMAX 조합을 통한 타입 안전성 강화
  • 가변 인자 함수 호출 시 타입 정보 유실 방지를 위한 명시적 타입 정의 준수

- 가변 인자 함수(execl, printf 등) 호출 시 인자 타입과 포맷 지정자의 완전 일치 여부 검토 - NULL 전달 시 정수 0으로 해석될 가능성을 배제하기 위해 대상 포인터 타입으로 Casting 수행 - 고정 폭 정수형(uint64_t 등) 출력 시 플랫폼별 차이를 방지하는 PRIu 계열 매크로 사용

원문 읽기