TIL/2025

for 조건문 내 후위 연산자의 위험성

고무 오리 2025. 8. 15. 11:22
728x90
Unit testing 진행 중 예상 했던 값보다 1큰 값이 얻어지는 기이한 현상이 발생했다.
원인을 분석해보니 for loop 조건문 내에 후위 연산자가 문제였다.

 

 

사건의 시작

cnt 값이 0이 될 때까지 for~loop를 도는 코드가 있다.

근데 동작이 묘하게 이상했다.

...

for (p = s; (cnt-- != 0) && *p != '\0'; ++p) {
    process(*p);
}

...

 

무엇이 문제일까? 맞춰보자

 

 

원인은 무엇?

원인은 for~loop 조건문 내 후위 연산자!

for~loop 이후 cnt 값을 사용하는 로직이 있다면

 

개발자는 cnt가 0인줄 알고 사용하지만 실제로는 -1이거나 overflow된 값이 됨

이 값을 사용하게 되면 undefined behavior!

 

 

평소 생각지 못한 오류여서 놀라웠다

 

728x90