C/C++ 전역변수/ 지역변수 설명 및 간단한 예제들.
#include <stdio.h>
int addition(int x, int y);
int a;
int main()
{
int b=6;
scanf("%d",&a); //전역변수 값 scanf로 지정
printf("%d", addition(a,b));
return 0;
}
int addition(int x, int y) {return x+y;}
지역변수는 한 지역(함수) 내에서만 사용할 수 있는 변수,
전역변수는 모든 지역에서 사용할 수 있는 변수를 말한다.
지역(함수) 안에서 변수 선언을 하면 지역변수가 되고, 함수 밖에서 변수 선언을 하면 전역변수가 된다.
하나의 변수를 프로그램 전반에 걸쳐 사용할 수 있다는 점이 전역변수의 가장 큰 특징이다. 하지만 전역변수를 남발할 경우 코드가 꼬여버릴 수 있다. 특히 프로그램의 덩치가 커질수록 변수명이 겹칠 가능성 (x, y, a, b, i ,j ,_ 등등..)이 있기 때문에, 지역변수로 해놓는 게 낫다. (지역변수와 전역변수가 겹칠 경우 지역변수를 먼저 사용한다.)
예시를 통해 체크해보자. 아래는 모두 변수 a=3, b=6을 활용하여 a+b=9를 출력하는 프로그램이다.
ex | a+b=3+6=9를 출력하는 프로그램.
<a,b를 지역변수로 사용했을 경우>
#include <stdio.h>
int main()
{
int a = 3, b = 6;
printf("%d", a+b);
return 0;
}
<a,b를 전역변수로 사용했을 경우>
#include <stdio.h>
int a=3, b= 6; // main에 있던 걸 main 밖으로 빼냄 -> 전역변수화
int main()
{
printf("%d", a+b);
return 0;
}
또한 전역변수를 main 외의 다른 곳에서도 사용할 수 있다.
<a,b를 지역변수로 사용하고, main에서 a, b를 받아 addition이라는 함수에 전달할 경우>
#include <stdio.h>
int addition(int x, int y);
int main()
{
int a=3, b=6; //둘 다 지역변수인 경우
printf("%d", addition(a, b)); //여기서 받아서
return 0;
}
int addition(int x, int y) {return x+y;} //이쪽으로 넘겨줌.
<a,b를 전역변수로 사용하고, main에서 a, b를 받아 addition이라는 함수에 전달할 경우>
#include <stdio.h>
int a=3, b= 6;
int addition(int x, int y);
int main()
{
printf("%d", addition(a, b)); //main에서 a, b 사용. addition()로 넘겨줌.
return 0;
}
int addition(int x, int y) {return x+y;}
<a,b를 addtion이란 함수의 지역변수로 사용하는 경우>
#include <stdio.h>
int addition();
int a;
int main()
{
printf("%d", addition()); //main은 a+b값만 받음.
return 0;
}
int addition() {
int a=3, b= 6; //여기서 a, b정의 후
return a+b; // a+b값 return
}
<a,b를 전역변수로 사용하고, a+b를 additon이라는 함수에 직접 전달할 경우>
#include <stdio.h>
int a=3, b= 6; //전역변수 선언
int addition();
int main()
{
printf("%d", addition()); //main은 addition의 return값만 받음.
return 0;
}
int addition() {return a+b;} //a, b 를 여기서 받아서 main으로 전달
<a를 전역변수, b를 지역변수로 사용한 후, b만 main에서 받아 addtion에 전달하는 경우>
#include <stdio.h>
int addition(int y);
int a=3; //여기서 받아줌
int main()
{
int b=6;
printf("%d", addition(b));
return 0;
}
int addition(int x) {return a+x;} //이쪽으로 a 바로 전달
<지역변수가 전역변수보다 먼저 사용된다. 전역변수 a=1111, main의 지역변수 a=2222 무시하고 addition()의 지역변수 a=3 사용하는 모습>
#include <stdio.h>
int addition(int y);
int a=1111;
int main()
{
int b=6;
int a = 2222;
printf("%d", addition(b));
return 0;
}
int addition(int x) {a=3; return a+x;}
물론 전역변수 값도 scanf로 바꿀 수 있다.
#include <stdio.h>
int a=3, b= 6; // 전역변수 선언
int main()
{
scanf("%d",&a); //여기서 전역변수 a의 값 재지정
printf("%d", a+b);
return 0;
}
개인적으로는 C를 쓸 일이 잘 없긴 하지만, 전역변수와 지역변수에 대한 개념은 알아두면 좋을 것 같긴 하다.
python에서도 전역변수 남발하면 코드 꼬이는 건 마찬가지라서.. 그런 쪽으로 익혀두면 괜찮을듯.