Chapter 5

GraGrass·2024년 2월 7일

함수

함수

1. 수학적 함수와 C 함수

수학적 함수

  • 값을 입력하면 그에 맞는 값을 줌

K&R C 함수

  • 명시하지 않으면 int를 return
    ex. printf() 함수는 출력한 문자의 수를 리턴
  • 리턴 값이 없는, void 함수는 없었음

ANSI C 함수

  • 함수를 호출하려면 원형을 알아야 함
  • 원형: return 자료형, 매개변수 자료형

함수 호출

  • 함수가 실행되고 return함
  • return하지 않으면 무한히 기다림
  • return 값이 함수의 실행 결과가 됨
  • return 값은 표현식이나 표현문으로 사용됨

프로그램 기본 구성 요소

  • 프로그램은 함수로 구성됨
  • 함수 안에 함수를 만들 수 없으며, 모두 같은 수준임

2. 함수의 정의

함수의 형태

  • 함수의 특성에 따라 전달 인자가 없거나 반환 값이 없을 수 있음
  • 매개변수: 함수 호출 시 전달되는 인자를 저장할 변수에 대한 선언
  • return 값은 최대 1개를 넘지 못함 -> 반환 자료형만 정의하면 됨

함수 원형 선언

#include <stdio.h>
int Large_Num(int, int) // 함수 원형 선언 (매개 변수 이름 필요 X)

int main(void){
	printf("3, 4중에서 큰 수는 %d이다.\n", Large_Num(3,4));
    return 0;
}

int Large_Num(int a, int b){
	return a>b ?a:b;
}
  • 정의를 호출 이후에 위치하기 위해서는 호출 전에 함수 원형을 선언해야 함
  • 함수 정의에서 몸체를 제외한 부분이 선언문

3. 함수 호출

caller와 callee

  • caller: 함수를 호출하는 부분, 매개 변수에 맞게 인자 제공
  • callee: 함수가 실행되는 정의 부분, 매개 변수를 통해 인자 값을 받음
  • caller의 인자 / callee의 매개 변수의 짝이 맞아야 함

컴파일러 별 함수 호출

  • K&R C 컴파일러: 매개변수-인자 불일치 시 논리 오류 발생 -> 프로그램을 죽일 수도 있음
  • ANSI C 컴파일러: 함수 원형을 미리 알아야 하며, 매개변수-인자 불일치 시 컴파일 오류

call by value

printf("%d\n", a) // a의 값을 printf 두번째 매개변수에 복사 -> callee에 전달
printf("%d\n", b+c) // b+c 값이 매개변수에 복사되는 효과
  • caller는 함수 호출 시 인자 값을 복사하여 보냄
  • call by reference와 상대되는 개념
  • 예외: 배열, 문자열은 call by reference(포인터)를 통하여 매개변수 받음

4. 함수 컴파일과 프로그램 링크

함수는 callee이면서 caller

  • main은 printf의 caller
  • 프로그램 시작 시, main은 callee가 됨
  • printf도 내부적으로 다른 함수의 caller가 됨

파일

  • 일반적으로 caller, callee는 같은 파일 안에 있지 X
  • 수정되는 파일만 컴파일 함
  • 모든 caller, callee 관계가 확정되어야 실행파일 생성 가능

변수

1. 개요

  • 변수는 선언되는 위치에 따라 전역 변수와 지역 변수로 나눠짐
  • 전역/지역 변수의 차이점: 메모리 상에 존재하는 기간, 메모리 접근 영역

2. 지역 변수

영역

  • local variable / automatic variable
  • 지역 = 중괄호에 의해 형성되는 영역 -> 중괄호 내 선언된 변수는 모두 지역변수
  • 지역 변수는 선언된 지역 내에서만 유효함

범위

  • 해당 지역 변수의 선언을 포함하는 함수 내에서만 접근 가능
  • 함수 호출 시 메모리에 올라감 -> 이후 함수 종료 시 메모리에서 소멸

형태

  • 반복문, 조건문 내에서도 지역 변수 선언 가능
  • 외부에 선언된 동일한 이름의 변수를 가릴 수 있음
  • 모든 매개변수(함수 정의 시 쓰이는 변수)는 지역변수

3. 전역 변수

정의

  • 프로그램 어디에서나 접근 가능한 변수
  • 전역/지역 변수 이름이 같은 경우 -> 지역 변수 우선!
  • 함수X 프로그램 시작 시 메모리상에 올라간 후 프로그램 종료까지 존재
  • 어디서나 접근 가능하므로 선언을 신중히

4. static 변수

정의

  • 변수 선언 시 static 키워드를 붙여서 선언된 변수
  • 선언 시 한번만 초기화 됨

특성

  • 함수 내에 선언된 static 변수는 전역 변수와 지역 변수의 특성을 가짐
    • 전역 변수: 프로그램 종료까지 소멸 X 초기화도 한번만
    • 지역 변수: 선언된 지역에서만 접근을 허용
  • 프로그램 실행 동안 변수가 계속 유지 되어야 하고, 특정 지역에서만 접근 시 사용
profile
올해는 진짜 갓생 산다

0개의 댓글