Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[독하게 시작하는 C 프로그래밍] 섹션 14. 함수에 대한 기본 이론 본문

C언어/독하게 시작하는 C 프로그래밍

[독하게 시작하는 C 프로그래밍] 섹션 14. 함수에 대한 기본 이론

개발새발 문타쿠 2023. 11. 12. 18:59

사용자 정의 함수 기초 이론

  • 함수는 '반환자료형 이름(매개변수 목록)' 형식으로 기술
  • 호출자(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) 생성
  • 변수나 함수 선언과 정의가 다른 파일로 분리될 수 있음
  • 링크 오류에 주의

전역변수와 식별자 검색 순서

  • 전역변수는 함수 바디 밖에 선언
    • 전역변수는 정적영역을 사용
    • 전역변수는 꼭! 필요할 때만 사용하기를 권장 -> 어지간하면 안쓰는걸 ㅊㅊ
  • 식별자 검색 순서
    • 지역 스코프
    • 최대 함수 바디
    • 최대 로컬 파일
    • 외부 파일까지 확장