scope: 함수 상에서 보이는 변수가 선언되고 사용 될 수 있는 공간 이다.
범위의 종류에는 지역변수와 전역변수가 있다.
지역변수의 스코프는 {}, 하나의 블럭 안에서 선언 되면, 그 안에서만 사용이 가능하다. 그리고 블럭이 끝나면 지역변수는 자동으로 삭제 된다.
life time : 메모리에 존재하는 시간을 말한다.
전역변수와 지역변수가 이름과 같게 선언되면 지역변수가 전역 변수를 가린다.
함수의 매개 변수도 일종의 지역변수로 그 함수 안의 블럭에서만 사용이 가능하고, 함수가 종료되면 지역변수도 사라진다.
그리고 함수에 인자로 변수가 들어갈 때에는 값이 복사가 되어 원래 선언된 주소와 다른 주소에 할당이 되어 호출된 함수가 종료될 때까지 사용되고 사라진다. 이를 call by value 라고 한다.
변수의 생존기간
1. 지역 변수
함수 내에서 선언되어 만들어진다. 그리고 해당블럭이 끝나면 사라진다.
2. 전역 변수
프로그램 시작 할 때에 선언되어 만들어진다. 그리고 생존시간은 프로그램이 종료될때까지이다.
정적 할당 : static allocation (전역변수)
자동 할당 : automatic allocation (지역변수)
저장 유형 지정자 : static , extern
static은 블럭 내에서 선언된 지역변수를 정적으로 할당 하고 싶을 때에 사용한다. 이 static 지정자가 붙게 되면 어디에 선언되었는지와 관계 없이 프로그램이 시작되고 main이 실행되기 전에 만들어진다. 그런데 이때에 전역변수는 초기화를 시키지 않아도 되지만 static으로 만들게 되면 초기화를 시켜주어야 한다. 그리고 한번 만들어진 후에는 다시 만들어 지지 않는다.
위와 같이 작성 해도 sub()가 호출 될때마다 static이 만들어지는 게 아니라 프로그램 시작시에 생성되고 ++ 연산 만 진행된다. 다시 0으로 초기화 되지 않는다. 그리고 이때에는 int_static_count 를 main에서 사용 할 수 없다. 메모리에는 계속 할당 되어 있지만 스코프를 벗어나기 때문이다. 따라서 여러 함수에서 쓰고 싶다면 전역 변수로 만들어 주어야 한다.
extern : 저장 유형 연산자
extern 다른 곳에서 선언된 변수를 사용 할 때에 사용한다.
다른 곳에서 include 하지 않아도 다른 소스 파일에서 가져올 수 있다.
함수나 전역변수에 static을 사용한다면 해당 파일안에서만 사용가능하다. 따라서 다른 파일에서 호출이 불가능해 진다.
함수는 extern을 붙이지 않아도 된다, 또한 extern 은 전역 변수만을 가져 올 수 있다.
function prototype은 헤더 파일로 만드는 것이좋다. 헤더 파일을 include 할때에 "" 와 <>의 차이는 ""은 같은 위상에 파일이 존재 할때, <>는 시스템에서 제공하는 파일이다.
여기에서 function prototype은 함수 원형과 같은 말이다.
% ubuntu는 선언만 하고 값을 초기화 하지 않아도 0으로 초기화가 된다.