210906, C언어 입문 - day 7

Min Hyeok·2021년 9월 6일
0

C언어 개념 익히기

목록 보기
7/19

안녕. 왜 9월 3일 다음이 9월 6일이냐고? 주말때문임 ㅋㅋ 9월 4일에 안했다고?
..
..
ㅈㅅ..
좀 나태했다.
오늘도 ㄹㅇ 공부 집중이 왜이렇게 안되는지 모르겠다. 이게 다 알바때문임. 돈이 문제다. 돈내놔!!!!!!!!!!!!!!!!!!!!!!!!

11장, 지역 변수와 전역 변수

지역 변수, 전역 변수.

말 그대로 우리가 C언어에서 다루는 변수에 관한 내용이다.

우선, 지역변수. 말 그대로 의역하면 "지역에서 쓰는 변수". 우리가 쓰는 프로그램이 전국 8도라고 쳤을때, 함수는 경상남도, 전라북도 등 특정 지역이라고 생각하자. 그러면 지역변수는 약간 사투리느낌. ..개소린가..? 머 그냥 대충 넉낌이 그렇다~~ 생각하자.

예시가 최고임

#include <stdio.h>

int sum(int a, int b) {
	
    int num;
    num = a+b;
    return num;
    
}

int main() {

	a = sum(2,3);
    printf("%d", a);

}

저기서 보면 num이라는 변수가 sum함수에 들어있는데,만약 main 함수에서 printf("%d", num);을 써줬다? 선언되지 않은 식별자라고 에러뜬다. 왜냐. num은 sum함수에 속해있는 지역변수거든. 그 지역에서만 써먹을 수 있다 이거지. 그런데 하나 알아둬야 할게, 지역변수에도 이름이 있잔아. 아까 num처럼. 이게 각 함수마다 이름을 한개씩 num, num, num 설정해도 오류가 없다. 그런데 굳이 이렇게 쓸 이유가 있을까 싶다? 차라리 sum_num, sub_num. 이렇게 하는게 낫지안ㅇ흘까? 아 키보드 진짜 s..

그 다음은 전역변수.

			   "저 전역 안햇는데요!!"
               

			       "어 가시고"
                   
                  ~~ㅋㅋ 이런거 누가 볼거라고 개드립치냐 난~~
                   

뭐 여튼 전역변수. 아까 지역변수는 전국 8도의 부분 부분이랬지? 전역변수는 전국8도를 포함하는 대한민국 느낌이다. 그 프로그램안에서 통용되는 함수임. 그래서 얘는 지역변수처럼 함수마다 같은 이름으로 set을 못함. 근데 이건 꼭 필요할때 쓰란다. 만약 실무에서 다른 프로그래머의 라이브러리 파일과 내 라이브러리 파일에 똑같은 변수 이름이 있으면, 개 피곤하겠지? ㅇㅇ.

그 다음, extern 키워드

같은 프로젝트 안에 존재하는 다른 소스코드(.c)에 존재하는 전역 변수를 참조한다는 의미임.

예시가 제일 빠르지?

/** A.c **/
int g_data = 1;

/** B.c **/
extern int g_data;

이렇게 하면, A.c에 있는 g_data를 B.c에서 빼와서 쓸 수 있다.

다음은 static 변수인데, 전역 벼눗의 사용 범위를 그 변수를 선언한 소스 파일로만 제한할 수 있다. 그러면 다른 소스코드에서 extern으로 빼 올수도 없고, 다른 소스파일에서 같은 이름으로 전역 변수를 set해도 오류가 안난다.

그리고 특정 함수에서 static을 써주는 때가 있는데, 예를 들면

#include <stdio.h>

void Test() {
    int data = 0;
    printf("%d, ", data++);
}

void main() {
	int i;
    for (i = 0; i < 5; i++) Test();
}

이렇게 해주면, 결과값이 어떻게 나올까?
"0, 0, 0, 0, 0,"이 나온다. Test라는 함수를 호출할 때마다 Test의 지역변수인 data가 0으로 새로 set이 되거든. 근데, 만약
static int data = 0;
이렇게 세팅 해준다면 어떻게 되냐.

"0, 1, 2, 3, 4,"가 나온다. "엥 왜요??"

static을 붙임으로서 그 함수에서는 전역변수처럼 역할을 할 수 있다. 지역변수의 포지션을 가지면서 기능은 전역변수를 가진다는거지. 그래서 Test를 호출 할 때마다 그냥 그딴거 상관없다는 마인드셋으로 자신이 가지고 있는 값을 유지하게 된다.

그리고 따로 알아두라고 나온 키워드로 const가 있는데, 그냥 그 변수를 "불변"하게 만드는 것이다.

만약 const double pi;라고 세팅해놨는데 뒤에 갑자기 "pi = 3.14;"라고 값을 넣으려고 한다? 어림도 없지, 바로 에러로 빠꾸먹는다. 소스 코드 작성할때 꼭 바꾸면 안되는 값에 const붙이고 주석으로 적어놓으면 깰금.

뭐..

여기까지.

0개의 댓글