int foo(int *arr, int i, int j) { if (i >= j) return 0; else { int x; for (int k=i; k<j; k++) { if (k == i || x > arr[k]) { x = arr[k]; } } return x; } }
인덱스 범위 [i,j) 에서 minimum 찾는 함수인데
else branch에서 i<j 인거랑 ||이 short-circuit evaluation 되는거 때문에 UB 안밟고 계산 잘 됨.
(short-circuit evaluation 없으면 x > arr[k] 처음 비교 할 때 x가 초기화 안돼있어서 UB임)

이 코드 주고서 안전한지 그렇지 않은지 물어봤는데
그냥 물어보면 전혀 감 못잡고
처음부터 끝까지 근거 대가면서 설명 해주면 끄덕끄덕 하는데
일부만 설명 안해주고 추론해보라고 하면 좀 알아먹는것 같다가 이전 자기 발언에 모순되는 대답함
좀 해보다가 귀찮아서 때려침.

원론적인 대답은 잘함. initialization 안하면 위험하다거나 저게 minimum 계산하는 함수라는 사실이나 (난 저게 무슨 함수인지는 물어보지도 않았지만)



근데 LLM이 저거 힌트 없이 잘 대답할 수 있으면 프로그래머들 모가지 되는거 한순간 일듯