함수
함수
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)
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)
printf("%d\n", 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 초기화도 한번만
- 지역 변수: 선언된 지역에서만 접근을 허용
- 프로그램 실행 동안 변수가 계속 유지 되어야 하고, 특정 지역에서만 접근 시 사용