@ 살펴볼 변수들
#include <stdio.h> #define MAC 111 double glo=10.01; main() { int loc=500; printf("loc = %d\n", loc); printf("glo = %f\n", glo); printf("MAC = %d\n", MAC); } |
@ #define MAC 111 이렇게 선언 된 변수를 매크로 변수라고 합니다. 쓰임새는 뒤에서... @ double glo=10.01; 이 변수의 위치를 잘 살펴보세요. 지금까지는 main() 함수의 { } 안에다 변수를 선언해왔었지만, 이 변수는 main() 함수의 바깥쪽에 위치하고 있으며, 어떤 함수의 내부에 있는 것도 아닙니다. 이런 변수를 전역변수라고 합니다. @ int loc=500; 지금까지 일반적으로 사용해오던 변수 입니다. 이런 놈들을 지역변수 또는 로컬변수라 합니다. 변수가 선언된 함수 내부에서만 사용되고 마는 변수입니다. |
@ 지역 변수
#include <stdio.h> void pri() { int k=5; } main() { pri(); printf("%d",k); } |
pri() 함수에 k라는 변수를 인트형으로 선언하였습니다. 이 변수 k를 메인함수에서 printf() 함수로 출력하라는 소스인데요.. 이렇게 하면 정상적으로 동작할까요? 정답은 아니다. 입니다 왜냐하면 k 변수는 pri() 함수에서만 사용되는 지역변수 이기 때문입니다. |
@ 전역 변수
k 라는 변수를 메인 함수가 아닌 다른 곳에서 선언 및 정의 해놓고 메인함수에서 출력하려면?
위 소스를 조금만 수정해서 k 값을 메인함수에서 출력해 보아요..
#include <stdio.h> int k; void pri() { k=5; } main() { pri(); printf("%d",k); } |
이번에는 정상적으로 5라는 값이 출력됩니다. k라는 변수가 전역변수로 선언되어있기 때문인데요 2번째 줄에 int k;를 보시면 pri() 함수나 main()함수 어느 곳에도 속해 있지 않지만 값을 대입하고 출력하고, 이렇듯 전역변수는 어떤 함수에서든 접근할 수 있습니다. |
#include <stdio.h> int k=3; void k5() { int k=5; } void k7() { int k=7; } main() { k5(); printf("%d",k); k7(); printf("%d",k); k5(); printf("%d",k); } |
k 변수를 3번 출력하게 될텐데요.. 어떤 값들이 출력될까요? 한번 맞춰보세요.. |
맞추셨나요? 2번째 줄에 int k=3; 이라는 전역변수, 이 변수만 메인함수에서 접근이 가능합니다. 비록 k5()함수를 호출해 int k=5; 라는 변수를 만들었지만 k5() 함수 내부에서만 사용되고 사라져 버린거지요..전역변수의 값이 변하지는 않습니다. 전역 변수의 값을 변화 시키려면 k5() 함수 내부의 int k=5; 에서 앞에 int를 떼버리면 됩니다. k=5; 와같이 하면 전역변수 k의 값이 변경되지요.. 그런데 이때는 333이 아니라 555가 출력되게 됩니다. 처음 k5() 함수가 호출 되었을 때 전역변수 k의 값이 5로 바뀌기 때문이죠. k5() 함수는 위 소스 그대로 두고 k7() 함수만 int 를 떼버리면? 377이 출력될 것입니다. 왜 그렇게 되는지 감이 오시나요? k5() 함수에선 int k=5; 이기 때문에 지역변수로서 k5함수 내부에서 사용되고 소멸. printf()함수에서는 현재 전역변수의 값 3을 출력 k7()함수에서 k=7로 값을 변경 printf()함수에서는 현재 전역변수의 값 7을 출력 k5()함수에선 역시 int k=5; 이기 때문에 지역변수로서 k5함수 내부에서 사용되고 소멸. printf()함수에서는 현재 전역변수의 값 7을 출력 이렇게 해서 377이지요... |
전역 변수...잘쓰면 편하고 좋겠지만, 조금만 방심해도 엉뚱한 값이 출력되는 프로그램이 되어버립니다.
프로그램은 오류 없이 정상적으로 돌아 가지만 엉뚱한 값이 나오게 되어 오류 찾기도 어려워지고요...
위 소스 같이 짧다면 문제 없지만 길어 질수록...버럭!!
꼭 신경써서 사용하세요;ㅎㅎ
@ 매크로 변수
#include <stdio.h> #define STUDENT 5 main() { int i; for(i=0; i<5; i++) printf("i<5 \n"); for(i=0; i<STUDENT; i++) printf("매크로 변수 이용 \n"); } |
#define STUDENT 5 라고 된것이 매크로 변수 입니다. 반드시 대문자로 사용해야 되는건 아니지만 대문자로 많이 사용들 하십니다. 소스를 보시면 반복 문이 두개 있는데 i<5, i<STUDENT 부분을 봐주세요. |
매크로변수.
이걸 어디에다 써? 라고 생각하실 수도 있을텐데요.
만약에 학생수만큼 무엇인가를 하는 작업이 여러개라고 생각해보세요
학생수가 30명이라서 반복문에서 조건을 i<30이라고 적어놓았고
이런 반복문이 여러개일때 학생수가 50명으로 늘어나 버리면, 반복문마다 찾아 다니면서30을 50으로 수정해주어야 겠지요?
하지만 매크로 변수를 하용하면 한곳만 수정 하면됩니다.
#include <stdio.h> #define STUDENT 5 main() { int i; for(i=0; i<3; i++) printf("1번 \n"); for(i=0; i<3; i++) printf("2번 \n"); for(i=0; i<3; i++) printf("3번 \n"); for(i=0; i<3; i++) printf("4번 \n"); } |
각각의 반복문마다 3번씩 돌게 됩니다. 이것을 5번씩 반복하게 하려면 i<3이라 적힌 부분을 i<5로 4곳을 수정해야 하겠지요? |
위 소스를 매크로 변수를 사용한 소스로 변경하면?
#include <stdio.h> #define STUDENT 3 main() { int i; for(i=0; i<STUDENT; i++) printf("1번 \n"); for(i=0; i<STUDENT; i++) printf("2번 \n"); for(i=0; i<STUDENT; i++) printf("3번 \n"); for(i=0; i<STUDENT; i++) printf("4번 \n"); } |
i<3일떄와 결과가 같습니다. 5번씩 반복 되도록 수정 하려면? 두 번쨰 줄의 #define STUDENT 3을 #define STUDENT 5 로만 바꾸어 주시면됩니다. |
#include <stdio.h> #define STUDENT 5 main() { int i; for(i=0; i<STUDENT; i++) printf("1번 \n"); for(i=0; i<STUDENT; i++) printf("2번 \n"); for(i=0; i<STUDENT; i++) printf("3번 \n"); for(i=0; i<STUDENT; i++) printf("4번 \n"); } |
5번씩 출력되고 있네요. 지금은 반복문이 4개 밖에 없지만 좀더 복잡한 프로그램이라면 매크로변수..유용하게 쓰이겠죠? |
'IT > Programing' 카테고리의 다른 글
c언어 함수이용 반복문 별찍기(별모양마다 각각의 함수) (1) | 2013.11.16 |
---|---|
c언어 for문 별찍기 (0) | 2013.11.05 |
c언어 함수 인자(파라미터, 아규먼트) (0) | 2013.11.01 |