수학기술지원 [969976] · MS 2020 · 쪽지

2023-10-11 20:36:25
조회수 1,674

C언어 잘알테스트 정답

게시글 주소: https://h.orbi.kr/00064700518

정답은 "모른다" 이다.


C에서 부호 있는 정수 (signed) 오버플로우는 정의되지 않은 행동이다. (Undefined Behavior)


따라서, 어떠한 결과값을 초래할 지 모른다.




clang 컴파일러 (맥 기본 컴파일러)

로 코드를 실행시키면,


최적화 옵션 (-Og, -O3) 에 따라 0 또는 1 결과값이 달라진다.



x + 1 > x는 컴파일러가 보기에 너무 당연한 코드이므로, 최적화 옵션을 주면 컴파일러는 반드시 함수가 1만 반환되도록 코드를 최적화한다.


또 어떤 다른 컴파일러는 정말로 x + 1 과 x를 비교하여 x + 1이 오버플로우가 발생해 값이 음수이므로, x (양수)보다 작다고 생각해 0을 반환할 수도 있다.



C 코딩을 할때 부호 있는 정수가 오버플로우되지 않도록 주의하자!



0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.


  • 첫번째 댓글의 주인공이 되어보세요.