-
C언어 변수Programming/C 2016. 5. 2. 20:22
변수
지역변수(Local Variable)
- 함수 내에만 존재 및 접근이 가능하다.
- '지역'이란 중괄호에 의해 형성되는 영역
- 지역변수는 '스택'이라는 메모리 영역에 할당된다.
- 지역변수는 접시에 쌓듯이 할당된다.
- 메모리 공간에 해당 선언문이 실행될 때 할당되었다가 선언문이 존재하는 함수가 반환을하면(종료) 메모리 공간에서 소멸된다.
- 매개변수: 지역변수의 일종
- 선언된 함수 내에서만 접근이 가능
- 선언된 함수가 반환을 하면, 지역변수와 마찬가지로 소멸이 된다.
전역변수
- 어디서든 접근이 가능한 변수
- 지역변수와 달리 중괄호 내에서 선언되지 않는다.
- 기본
0
으로 초기화된다. - 프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재한다. - 전역변수와 동일한 이름의 지역변수가 선언되면 해당 지역 내에서는 전역변수가 가리워지고, 지역변수로의 접근이 이루어진다.
- 그냥 이름을 달리하는 게 좋다!!
- 전역변수는 프로그램의 구조를 복잡하게 만드는 주범
스파게티 코드
소프트웨어 공학에서는 전역변수의 과도한 선언과 같은 잘못된 프로그래밍 방식에 의해서 생성된 얽히고 설킨 코드를 가리켜 '스파게티 코드'라 한다.static 변수
- 지역변수에 static 선언이 붙게 되면 전역변수의 성격을 지니는 변수가 된다.
- 지역변수에 static 선언이 붙게 되면,
- 선언된 함수 내에서만 접근 가능하다. (지역변수의 특성)
- 딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재한다. (전역변수 특성)
- 전역변수보다 안정적이다.
register 변수
- 지역변수에 register 선언을 추가한 변수
- CPU 내에 존재하는 '레지스터'라는 메모리 공간에 저장될 확률이 높다.
- 연산이 빠르다.
- 컴파일러가 레지스터의 활용여부를 결정한다. 아무리 register 선언을 추가한다고 해도 컴파일러가 합당하지 않다고 판단하면 레지스터에 할당되지 않는다.
'Programming > C' 카테고리의 다른 글
C언어 Call-by-value vs. Call-by-reference (0) 2016.05.02 C언어 포인터 배열 (0) 2016.05.02 c언어 포인터 (0) 2016.05.02 1차원 배열 (0) 2016.04.30 도전 프로그래밍1 (0) 2016.04.30