반응형
728x90
반응형

함수와 변수의 생명주기

  • 함수

문제를 해결하는데 앞서 문제를 작은 단위로 나누는 과정에서 그 작은 단위의 문제를 해결하는 하나 이상의 기능을 지닌 부 프로그램.

함수 정의의 기본 틀

  1. ‘ 함수_이름 ‘ 에는 말 그대로 함수의 이름을 정의한다.

  2. ‘ 출력_타입 ’ 에는 해당 함수가 값을 반환할 경우 반환하는 값의 자료형을 기재한다.
     -> 왜냐하면 함수의 값을 받을 때, 어떤 자료형 변수로 받을지 결정할 수 있어야 하기 때문이다.

  3. ‘ 입력_형태 ‘ 에는 함수가 실행될 때 입력 값으로 받는 인자를 기재한다. 여러 타입, 여러 개의 인자를 받을 수 있다.

  4. ‘ 함수의 내용 ‘ 에는 함수가 수행할 연산 명령들이 정의 된다.

  5. ‘ 출력_타입에_따른_반환_값 ‘ 에는 함수가 종료 하면서 반환하는 값을 기재하는데, 조건문에 의하여 여러 번 기재될 수 있으며 ‘ 출력_타입 ‘ 에 맞춰 값을 반환한다.

함수의 정의와 호출 및 선언

함수의 정의와 호출

<입력 X / 출력 X func 함수의 정의와 호출>

<입력 O / 출력 X func 함수의 정의와 호출>

<입력 X / 출력 O func 함수의 정의와 호출>

<입력 O / 출력 O func 함수의 정의와 호출>

함수의 선언

위와 같이 함수를 main 함수 밑에서 정의할 때, main 함수 내에서 함수의 호출이 정의보다 앞서는 이유로 함수가 존재 하지 않는다는 에러가 발생하는데 이 때 main 함수 상단의 선언을 통해서 정의가 밑에 있음을 컴파일러에게 명시하여 문제를 해결한다.

  • 변수의 생명주기

<지역 변수( = 자동 변수 )>

중괄호 내에 일반적인 형태(자료형 + 이름)로 선언 되는 모든 변수

  • 해당 지역(해당 변수를 감싼 가장 가까운 중괄호 내의 영역)에서만 유효

  • 해당 지역을 벗어나면 자동으로 소멸

  • 선언된 이름이 같아도 지역이 다르면 중복 선언이 가능

  • 선언 시 메모리의 ‘스택’ 영역에 ‘쌓이는’ 형태로 할당 된다. (LIFO)

  • 조건문 혹은 반복문 내에서 선언된 변수 그리고 함수에서의 매개 변수 또한 지역 변수이다.

  • 지역 변수는 외부에서 선언된 동일한 이름의 변수를 가리게 된다. -> 변수의 이름을 통해 메모리에 접근 시 해당 지역에서 먼저 찾은 후 지역의 외부에서 찾는다.

  • for문이나 while문의 소괄호 내부가 아닌 중괄호 내에서 선언된 변수는 생성과 소멸을 반복한다. -> 반복은 중괄호의 진입과 탈출의 반복이기 때문

<전역 변수>

  • 중괄호 내에 선언 되지 않는다.

  • 프로그램의 시작과 동시에 메모리 공간에 할당되어 프로그램의 종료 시까지 존재한다.

  • 초기화를 직접 하지 않더라도 0으로 자동 초기화 된다.

  • 프로그램의 전체 영역 어디서든 접근이 가능하다.



<Static 정적 변수>

  • static 지역 변수

지역 변수에 static 키워드를 붙임으로써 생성되는 정적 변수.
선언된 중괄호 내에서만 접근이 가능( 지역 변수의 특성 )
1회 초기화되고(직접 초기화 하지 않을 경우 0), 프로그램 종료 시까지 메모리 공간에 존재( 전역 변수의 특성 )

  • static 전역 변수

전역 변수에 static 키워드를 붙임으로써 생성되는 정적 변수.
정적 전역 변수는 파일 외부에서 extern 키워드를 이용한 접근이 불가능함. -> 변수의 접근 범위를 해당 파일로 변경

<Register 변수>

지역 변수에 register 키워드를 붙임으로써 생성되는 변수.

Register로 선언된 변수는 CPU 내에 존재하는 ‘레지스터’ 라는 메모리에 공간이 할당될 ‘확률’이 높다. 레지스터 영역은 작고, 중요한 영역으로 상당히 제한이 있는 메모리 공간이기 때문에 register 키워드를 붙인다고 해서 무조건적으로 레지스터 영역에 할당이 되는 것이 아니다. 컴파일러에게 요청을 하는 명령이다.

전역 변수에 register 키워드를 붙이는 요청은 컴파일러에 의해 거절 된다. 중요한 메모리 영역을 전역 변수로 계속 해서 할당을 시키는 것은 명백한 자원 낭비이기 때문이다.



  • 재귀 함수

함수 내에서 자기 자신(함수)을 다시 호출하는 함수.

재귀 함수의 간단한 예이다. 재귀 함수의 필수 구성 요소는 다음과 같다.

  1. 빨간색에 해당하는 1번 원의 ‘ 재귀 호출 ‘ -> 자기 자신에서 자신을 다시 호출하는 것(복사본)

  2. 파란색에 해당하는 2번 원의 ‘ 탈출 조건 ‘ -> 재귀 구조의 무한 루프에 빠지지 않도록 한다.

728x90
반응형

'컴퓨터 언어 정리 > C 언어' 카테고리의 다른 글

08 포인터 기본  (0) 2020.09.11
07 1차원 배열  (0) 2020.09.11
05 반복과 분기  (0) 2020.09.08
04 상수와 자료형  (0) 2020.09.07
03 수의 표현 방식  (0) 2020.09.06

+ Recent posts