printf 함수를 중간에 하나라도 넣어놓으면 일단 함수를 실행해 주기는 한다. 끝.
다음은 사족과 딴소리다 :
디버그는 정말 좋다. 저런 알 수 없는 코드도 어떻게 동작하는지 쉽게 알 수 있기 때문이다.
빌드 모드는 Debug와 Release 모드가 있는데, 간단히 말하자면 Release 모드가 좀 더 최적화된 코드를 생성한다.
의미없는 반복은 없애고, 너무 짧은 함수는 합쳐 버리고 하는 식이다.
원래대로라면 Debug 모드와 Release 모드가 같은 동작을 해야 하겠지만, 최적화 때문에 함수가 다르게 실행되기도 한
다. 이 경우에 어디서 버그가 일어났는지를 확인하는 것은 매우 어려워지는데, 왜냐하면 변형된 코드가 실제로 있는 것이
아니기 때문이다.
그렇다면 어떻게 해야 변형된 코드에서 실행 순서를 알 수 있을까?
답은 코드가 변형되지 않게 하는 것이다.
저 함수는 다른 함수라고는 malloc 정도만 실행하고 나머지는 모두 값 대입이다. malloc은 아주 비용이 적은 간단한 함수이므로 이 함수 전체도 짧은 함수일 것이다. 그래서 변형되는 것이고.
여기서 비용이 매우 큰 함수를 하나 포함하면 함수가 사라지지 않을 것이다. 그래서 대충 printf를 끼워넣는 것이다.
이제사 느끼는건데 scanf나 _getch같은 입력 함수가 더 디버그에 좋지 않았을까. 아무렴 어때.
사실 저기에 버그가 있다는 걸 안 순간 이미 끝났다. 디버그는 버그가 어디에 있는지 찾아다니는 과정이니까...