
C/C++은 현대에 와서 '어려운 프로그래밍 언어' 중 하나로 손꼽히는 처지가 되었습니다. 여러가지 이유가 있겠지만, 저는 감히 그 이유를 '함정에 빠지기 쉽다'고 하겠습니다. 개중에 하나는, '정의되지 않은 동작(undefined behavior, 이하 UB)'입니다. C/C++에만 존재하는 이 요상한 개념은 말 그대로 표준에서 어떻게 동작할지 정의하지 않은 동작들인데요. 그냥 컴파일러가 무슨 짓을 할 지 모르는 겁니다. 왜냐하면 정의된 게 없으니까. 무얼 하든 컴파일러 마음입니다. 비슷한 개념으로는 unspecified behavior(이하 UsB)가 있습니다. 마땅히 통용되는 번역은 없는 것으로 알고 있기에 그냥 UsB라고 하겠습니다. 이건 표준에서 어떤 동작으로 이어질 지 후보만 추려놓은 개념입니..