C언어의 모든 코드가 미정의 동작 위험
원제: Everything in C is undefined behavior
왜 중요한가
메모리 안전성 부족으로 인한 보안 취약점이 지속되는 상황에서 C언어 한계에 대한 논의 확산
30년간 C/C++ 개발자인 블로거가 C언어의 근본적 문제점을 지적했다. 정렬되지 않은 포인터 접근, 최적화 없이도 발생하는 미정의 동작 등으로 완벽한 C 코드 작성이 불가능하다고 주장했다.
블로거 Thomas Habets는 30년간 C/C++ 프로그래밍을 해온 경험을 바탕으로 C언어의 구조적 문제를 분석했다. 그는 "세계 최고의 C 프로그래머가 작성한 6줄의 코드에서도 미정의 동작을 찾을 수 있다"며 리슐리외 추기경의 말을 패러디했다.
특히 정렬되지 않은 포인터 접근 문제를 예시로 들었다. int 포인터가 올바르게 정렬되지 않은 주소를 가리킬 때 발생하는 동작이 아키텍처마다 다르다는 점을 지적했다. Linux Alpha에서는 커널이 소프트웨어 에뮬레이션을 제공하지만, SPARC에서는 SIGBUS로 프로그램이 중단되고, x86에서는 문제없이 작동한다.
그는 최적화 없이도 미정의 동작이 발생한다며, 컴파일러가 코드가 유효하다고 가정하기 때문에 의도치 않은 결과가 나올 수 있다고 설명했다. 1972년(C)과 1985년(C++)의 환경과 2026년 현재 환경이 다르다며, 업계가 지속적으로 같은 실수를 반복하고 있다고 비판했다.