문타쿠, 공부하다.
[독하게 시작하는 C 프로그래밍] 섹션 14. 함수에 대한 기본 이론 본문
사용자 정의 함수 기초 이론
- 함수는 '반환자료형 이름(매개변수 목록)' 형식으로 기술
- 호출자(Caller) 함수와 피호출자(Callee) 함수로 관계를 규정할 수 있음(Binding)
- 호출자는 피호출자 함수의 매개변수 초깃값을 기술해야 할 의무가 있음
- 피호출자 함수는 호출자 함수에게 값을 반환
- C언어는 함수로 시작해서 함수로 끝난다.
- 함수는 하나의 기능/덩어리/단위로 생각하자.
- 입출력 함수와 같이 여러 함수들을 합쳐서 C언어의 런타임 Runtime 라이브러리 Library라고 한다. = CRL
- SDK(Software Development Kit)
- 어떤 소프트웨어를 만드는 데 필요한 라이브러리를 모아놓은 공구상자 같은 존재
- SDK는 라이브러리/API/함수의 집합체
- 어떤 때는 sdk 또 어떤 때는 라이브러리, API로 용어가 바뀌지만(?) 이것들의 근본은 함수이다.
기초적인 함수 설계 원칙
- UI와 가능은 반드시 분리 -> 분리 안하면 난중에 후회 아디오스...
- 재사용 가능한 단위 코드는 함수로 구현(DRY 원칙) -> 무엇을 함수로 만들지 고민하자
[필수 실습 문제] 최댓값을 반환하는 함수
#include <stdio.h>
int numMax(int a, int b, int c);
int main(void)
{
int num1 = 0, num2 = 0, num3 = 0;
int max = 0;
printf("정수 세 개를 입력하세요.\n");
printf(">> ");
scanf_s("%d", &num1);
printf(">> ");
scanf_s("%d", &num2);
printf(">> ");
scanf_s("%d", &num3);
max = numMax(num1, num2, num3);
printf("최댓값은 %d입니다.\n", max);
return 0;
}
int numMax(int a, int b, int c)
{
int max = a;
if (max < b) max = b;
if (max < c) max = c;
return max;
}
이벤트 루프 구현
- main() 함수에서 사용자 인터페이스 출력 및 사용자 입력을 반복하는 구조
- 보통 메뉴 출력과 사용자 선택을 확인
- 메뉴 선택에 따라 기능 수행
- 대부분의 응용 프로그램이 채택하는 일반적인 구조
원형 선언과 분할 컴파일
함수 원형 선언
- 함수의 선언과 정의를 분리
- 컴파일러에게 함수의 존재를 알리기 위해 분리한 선언을 코드 상단에 기술
- 함수 바디 없이 원형만 기술할 경우 함수 시그니처라고 부르기도 함
- 함수 원형 선언에서는 매개변수 이름은 생략 가능
분할 컴파일
- 한 프로젝트에 여러 소스코드 파일(.c)을 운영하는 경우 각각을 개별 컴파일
- 개별 소스코드에 대한 목적파일(.obj) 생성
- 변수나 함수 선언과 정의가 다른 파일로 분리될 수 있음
- 링크 오류에 주의
전역변수와 식별자 검색 순서
- 전역변수는 함수 바디 밖에 선언
- 전역변수는 정적영역을 사용
- 전역변수는 꼭! 필요할 때만 사용하기를 권장 -> 어지간하면 안쓰는걸 ㅊㅊ
- 식별자 검색 순서
- 지역 스코프
- 최대 함수 바디
- 최대 로컬 파일
- 외부 파일까지 확장
'C언어 > 독하게 시작하는 C 프로그래밍' 카테고리의 다른 글
[독하게 시작하는 C 프로그래밍] 섹션 16. 함수 응용 (0) | 2023.11.26 |
---|---|
[독하게 시작하는 C 프로그래밍] 섹션 15. 메모리와 포인터 (0) | 2023.11.19 |
[독하게 시작하는 C 프로그래밍] 섹션 13. 배열과 프로그래밍 기법 (Part 3. C언어 수준향상) (0) | 2023.11.09 |
[독하게 시작하는 C 프로그래밍] 섹션 12. 반복문 (0) | 2023.11.02 |
[독하게 시작하는 C 프로그래밍] 섹션 11. 기본 제어문 (0) | 2023.11.01 |