-
반응형
코드 수정 작업을 하다가 제목과 같은 global variable multiple definition of ... 컴파일 오류를 만날 때가 있다. 말 그대로 전역변수가 다중으로 선언되었다라는 의미인데, 분명 코드 작성자는 의도적으로 저렇게 작성하지 않았을텐데 저 문장을 만나게 되면 골치가 아파진다.
모듈화된 코드를 만들고 있다라고 가정했을 때, 다음과 같은 순서로 진행할 수 있다.
1) 헤더파일에 자료구조와 함수들의 선언부를 작성하였다.
2) 헤더파일에 자료구조의 전역 변수를 선언하였다.
3) 코드파일에 함수 구현부를 작성하였다.
위와 같이 진행할 경우, 결과적으로 2번 때문에 global variable multiple definition of ... 컴파일 오류를 만날 가능성이 엄청나게 올라간다. 이 모듈화된 코드를 여기 저기서 사용하면, 여기에선 넘어가겠지만 저기에서는 모듈화된 코드를 사용하기 위해서 헤더파일을 include하는 순간 컴파일 오류를 만나게 되는 것이다.
여러가지(?) 해결방안들이 stackoverflow에서 이야기 되어지고 있다.일반적으로 헤더파일을 include하지 말고 extern 키워드를 통해서 해결하는 방안들이 주로 이야기되는데, 링커 과정에서 합쳐질 때 해당 데이터를 참조할 수 있으니 나름 괜찮은 방안의 이야기라 할 수 있다.
이러한 문제점을 만나면 해결하는데 조그마한 도움이 될 수 있다.
http://stackoverflow.com/questions/223771/repeated-multiple-definition-errors-from-including-same-header-in-multiple-cpps
개인적인 의견으로는 왠만하면 전역변수 사용하지 말자!!
보통은 접근성이 편하니까 혹은 무관심으로 인해 전역변수가 손쉽게 사용되어질 수 있다.
하지만 모듈화랑 전혀 관련이 없을까? 전역변수 필요성이 충분할까? 사소하지만 이런 작은 고민 하나가 다른 설계 방향을 보여주지 않을까.
반응형