AI 요약
C++26에서 부작용 없는 무한 루프(예: while(true);)가 더 이상 미정의 동작(UB)이 아니게 된다. C++11의 forward progress guarantee 도입 이후 이러한 루프는 UB로 취급되어 Clang 등 컴파일러가 루프를 제거하고 예기치 않은 코드를 실행하는 문제가 있었다. P2809R3 제안이 C++26에 채택되면서 이 문제가 해결되었으며, 해당 수정은 결함 보고서(defect report)로도 승인되어 이전 표준 모드에도 소급 적용될 수 있다.
핵심 포인트
- C11은 상수 표현식 제어 루프의 종료를 가정할 수 없도록 규정했지만, C++은 이를 채택하지 않아
while(1);이 C에서는 정의되고 C++에서는 UB가 되는 괴리가 발생 - Clang에서
while(true);뒤에Hello world!가 출력되는 사례가 대표적 UB 결과 - 임베디드·커널 코드에서 치명적 오류 시 halt 패턴으로 쓰이는
while(true);가 최적화로 제거되면 하드웨어가 손상 상태로 계속 실행되는 위험 존재 - P2809R3 제안으로 C++26에서 trivial infinite loop가 정의된 동작으로 변경
향후 전망
- 최신 컴파일러에서 C++20 모드로도 수정이 적용되어 재현이 어려워질 수 있음
- 임베디드·실시간 시스템의 오류 처리 코드 안정성 향상 기대
