사용자 정의 함수 기초이론
- 개념
- 함수는 ‘반환자료형 이름(매개변수 목록)’ 형식으로 기술
- 호출자 함수와 피호출자 함수로 관계 규정 가능
- Binding
- 호출자 피호출자(함수 내부에서 함수를 부르는 것)의 관계를 Binding이라고 한다.
- compile time → Static binding
- run time → dynamic binding
- int sum = sum(3, 4)
- 변수에 = 주소에 해당하는 함수(함수 호출 연산자)로 해석할 수 있다.
- 결국 함수 명은 일정 스코프 내에서 유효한 메모리 주소로 해석 가능
- 호출자는 피호출자 함수의 매개변수 초깃값을 기술해야할 의무가 있음
- 피호출자 함수는 호출자 함수에게 값을 반환
기초적인 함수 설계 원칙
- 개념
- UI와 기능은 반드시 분리
- 재사용 가능한 단위 코드는 함수로 표현
- DRY 원칙
- DO NOT REPEAT YOUR SELF!!!
- 복붙하지 마라
[실습] 최대값 반환 함수
#include <stdio.h>
int getMax(int a, int b, int c) {
int max = a;
if (a < b) max = b;
if (b < c) max = c;
return max;
}
int main() {
int a = 0, b = 0, c = 0;
printf("input: ");
scanf("%d%d%d", &a, &b, &c);
printf("max: %d", getMax(a, b, c));
}
이벤트 루프 구현
원형 선언과 분할 컴파일
-
개념
- 함수의 선언과 정의를 분리
- 컴파일러에게 함수의 존재를 알리기 위해 분리한 선언을 코드 상단에 기술
- 함수 바디 없이 원형만을 기술(시그니쳐)
- 함수 원형 선언에는 매개밴수 이름 생략 가능
-
분할 컴파일
- 한 프로젝트에 여러 소스 코드 파일(.c)을 운영하는 경우 각각을 개별 컴파일
- 개별 소스코드에 대한 obj 파일 생성
- 변수나 함수 선언과 정의가 다른 파일로 분리될 수 있음
- 링크 오류에 주의
전역 변수와 식별자 검색 순서
- 개념
- 전역 변수는 함수 바디 밖에 선언
- 전역 변수는 꼭 필요할 때만 써야한다.
- 유지 보수에 굉장히 취약
- 정적 영역을 사용하기 때문에, 멀티 스레딩 등에서 문제가 발생
- 만약 사용한다고 하면, 전역 변수 프리픽스
g_ 꼭 써라
- 식별자 검색 순서
- 지역 스코프
- 최대 함수 바디
- 최대 로컬 파일
- 외부 파일까지 확장