10jobss   5년 전

컴파일러에 대한 지식이 부족한 초보입니다.

아래 코드에서 ans 변수를 초기화 하지 않은 경우에

visual studio에서는 runtime에 error를 잡아주었고

gcc 에서는 알아서 0으로 초기화 해주는지 답이 잘 나오는 것(?)처럼 보입니다. (??)

백준에서는 WA를 받았습니다.

gcc의 경우 local과 online judge 결과 차이가 난 이유가 무엇인가요?? local에서 알아서 0으로 초기화 해주는 것일까요?

- online judge 채점 환경
OS: Ubuntu 16.04.4 LTS
컴파일: gcc Main.c -o Main -O2 -Wall -lm --static -std=c99 -DONLINE_JUDGE
버전: gcc (GCC) 7.3.0

- local 환경

f7041739-4868-4909-8dc4-745b545b8044

djm03178   5년 전

재량껏 0으로 초기화를 해주는 컴파일러가 있는지는 모르겠지만, 제가 아는 컴파일러들 중에선 굳이 그렇게 해주는 경우는 보지 못했습니다. 0이라는 값은 메모리에 너무 흔해서 어느 환경에서 돌려도 우연히도 0이 있던 자리에 변수가 위치할 가능성이 높을 뿐입니다.

eric00513   5년 전

코드의 27번째 줄을 보면 ans에 ans와 mid의 최솟값을 집어넣는 것 같습니다. 그렇지만, ans가 초기값이 mid가 될 수 있는 값의 최대보다 크면 ans는 마지막까지도 값이 유지됩니다. 따라서 최댓값을 구하는 문제는 항상 ans와 같은 변수를 0으로 초기화 해야 됩니다.

10jobss   5년 전

@djm03178 감사합니다! 혹시 이런 지식은 구글링을 통해 알게 되신건가요?? 아니면 특정 과목을 공부하신건가요??

@eric00513 감사합니다!

djm03178   5년 전

예전에 어디선가 얼핏 들었던 내용이고, 실제로 프로그래밍을 하면서 어떤 값들을 변수에 주로 넣게 되는지 생각해본다면 0이 아주 많은 게 자연스럽다는 걸 느끼게 됩니다.

eric00513   5년 전

@djm03178 님 덕분에 저도 한 가지 배우게 되네요^^. 0은 메모리 공간에서 많이 있는 수라는 것을요.

srand   5년 전

gcc optimize option -O2, -O0 차이 일 것 같네요.

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