본문 바로가기

프로그래밍/C언어

[C언어] 지역변수와 전역변수

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



 전역변수와 지역변수는 선언된 위치에 따라 구분된다. 전역변수의 경우 함수 바깥에 선언되어 있고, 지역변수는 함수 중괄호 안에 선언되어 있다. 그렇다면 while문이나 for문 안에 선언되어 있는 변수는 어떤 변수일까.





 for문 안에 선언된 변수 역시 지역변수이다. 지역변수는 중괄호 영역에서만 사용할 수 있는데 nTotalCount 는 for문에서 유효하고 nTamp 변수는 메인 함수 전체에서 유효하다.





 이렇게만 보면 지역변수보다 전역변수를 이용해 코딩을 하는 것이 훨씬 편하게 느껴진다. 함수에 매개변수를 사용하지 않아도 되고 이 함수 저 함수 구분 없이 변수를 바로 가져다 쓸 수 있기 때문이다.  이 내용은 전역변수의 장점이 될 수도 있지만 단점이 될 수도 있다. 전역변수를 많이 사용하면 사용할수록 복잡하고 이해하기 힘든 코드가 만들어지기 쉽기 때문이다. 

 전역변수를 자주 선언하다 보면은 전역변수의 이름과 지역변수의 이름을 똑같이 선언하는 경우가 생긴다.




 실행 결과

 




 함수 안에 같은 이름으로 선언된 지역변수가 있다면 그 변수의 값이 변하게 된다. 하지만 함수 밖에서 같은 이름의 변수를 부르면 지역변수를 호출하는 것이기 때문에 위와 같은 결과가 나올 수 있다. main 함수에서 전역변수 nTotal을 사용하고 싶어도 지역변수 nTotal 때문에 사용할 수 없다. 같은 이름으로 선언하지 않으면 되지 않느냐라고 말할 수도 있지만 누구나 언제든지 실수할 수 있기 때문에 조심해서 사용해야 한다.





 전역변수뿐만 아니다. 지역변수를 사용해야 할 때도 조심해야 한다.

 변수를 잘못 선언한다고 해서 프로그램이 죽는다거나 치명적인 버그가 발생하지는 않는다. (물론 잘못된 값이 들어간다면 치명적인 버그가 될 것이다.) 하지만 변수에 들어간 잘못된 값을 찾는다는 건 많은 시간과 노력이 필요한 작업이 될 것이다.