nam3856   4년 전

이렇게 냈는데 맞았다고 뜨는데요...

 for 문 안에 있는 c==0을 지우면 틀렸다고 떠요...

애초에 c 초기화 안해서 틀려야하는거 아닌가요? 왜 저 조건이 있을때 맞았다 뜨는걸까요....?

bupjae   4년 전

초기화하지 않은 변수를 사용한 프로그램의 결과는 정의되지 않았습니다. (undefined behavior)

이 프로그램의 결과를 예측하는 것은 불가능합니다. 틀렸습니다, 런타임 에러, 시간 초과 를 포함하여 어떠한 결과라도 나올 수 있고, 심지어 아주 우연히 맞았습니다 를 받을수도 있습니다.

  

  

지금부터 하는 이야기는 특정 컴파일러 (linux gcc x86-64 8.3) 및 옵션 (-O2) 에만 해당하는 이야기입니다.

다른 컴파일러 또는 옵션을 사용하면 전혀 다른 결과를 얻을 수 있습니다.

   

16번째 for 문에 c==0 을 넣은 코드의 어셈블리 소스를 분석한 결과, for 문 돌입 직전에 c = 0으로 초기화하는 코드가 삽입되어 있었습니다.

c==0 이 없는 코드에서는 c를 초기화하는 코드가 삽입되어 있지 않았습니다.

이런 차이가 발생한 이유 등을 분석하는 건 의미가 없을 것 같습니다.

댓글을 작성하려면 로그인해야 합니다.