specture258   1년 전

int arr[20], Y,M; 이 부분을 전역변수로 선언해서 제출했을 땐 정답이라고 뜨는데

다음과 같이 main함수 안에서 선언하면 틀렸다고 뜹니다.

무엇이 문제인지 확실하게 잘 모르겠습니다.

chansol   1년 전

전역에서 선언한 변수는 0으로 초기화되지만 지역에서 선언한 변수는 직접 초기화해야 합니다.

specture258   1년 전

아 그럼 지역에서 선언한 변수는 초기화를 안하면 쓰레기값이 들어가서 static을 써서 정적변수로 선언하면 되나요? 그리고 인터넷에서 찾아보니까 PS에서는 되도록이면 전역변수를 쓰라고 하는데 따로 이유가 있을까요?

chansol   1년 전

굳이 static 변수로 만드는 것 보다는 직접 초기화 해주는게 좋을 것 같습니다.

후자는 저도 잘 모르겠습니다.

adung7   1년 전

단순히 ps에서는 코드 유지보수나 코드가 길지 않고 디버깅이 쉬운편이여서 전역 변수가 사용하기 편해서 그런겁니다.

개발자들이 보통 전역 변수를 될수 있으면 기피하는 이유가 모든 함수에서 접근 가능하다보니 디버깅이나 코드 가독성에서 되게 불편하게 되어 기피하게 되는데 ps에서는 앞서 말했듯이 그런일이 적기때문에 편의를 위해 전역 변수를 많이 사용하는편입니다.

또한, ps에서 할당해야할 메모리가 큰 경우 ex) int arr[500][500]; 지역 변수로는 스택 영역(1MB)에 넣을수 없기때문에 전역 변수를 이용해 할당하게 됩니다. 

전역 변수는 데이터 영역이여서 스택 영역보다 크기 때문이죠.

물론 백준에서는 스택 메모리 제한이 없다보니 제출은 할 수 있으나 로컬에서 예제를 못 돌려보기때문에 주로 전역 변수를 사용하게 됩니다.

specture258   1년 전

감사합니다. 이해가 잘 되었습니다.

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