C언어_6

gimmicks_u·2022년 3월 31일
0

C언어

목록 보기
6/13
post-thumbnail

함수

입력을 넣었을 때, 출력값이 나오는 블랙박스

함수 사용 목적

  • 코드의 가독성이 높아짐
  • 코드의 유지 보수 및 확장이 용이해짐
  • 중복방지

표준함수

c언어에서 제공해주는 기본 함수들을 표준함수라고 하며, printf가 그 중 하나이다. 함수를 라이브러리화 시켜서 편리하게 사용할 수 있게 해준다. 헤드파일에 수 많은 표준함수들이 정의되어있다.

사용자 정의 함수

사용자가 원하는 기능을 함수화시켜 사용할 수 있다.

기본 형태

자료형 함수이름(인수목록)
{
	함수의 내용
}
  • 자료형 : 함수가 리턴하는 값의 자료형. 리턴할 값이 없으면 void
  • 인수 목록 : 함수에 필요한 값을 전달

두 정수를 입력받아 합을 반환해주는 함수

#include <stdio.h>

int Add(int a, int b);

void main()
{
    int a, b, hap;
    printf("두 개의 정수를 입력하세요 : ");
    scanf("%d%d", &a, &b);

    hap = Add(a, b);
    printf("두 수의 합 : %d\n", hap);

    return;
}


int Add(int i, int j)
{
    return i + j;
}

일반적으로 사용자 정의 함수가 main함수보다 뒤에 있을 경우 에러가 나지만, Add 함수의 첫 줄 int Add(int a, int b)을 세미콜론과 함께 적어주면(함수의 원형) main함수보다 뒤에 있더라도 컴파일, 실행될 수 있다.

ex) 함수의 원형(.h)과 소스 코드(.dll)을 따로 관리

main에 선언된 a, b값이 Add함수에 선언된 i, j 에 옮겨질 때, 메모리 값은 복사된다 (call by value)

void형 함수

결과값을 리턴하지 않는 함수이다.

#include <stdio.h>

int Add(int a, int b);
void print_Start()
{
    printf("-----programming start-----\n");
    printf("두 개의 정수를 입력하시오 : ");
}

void print_Hap(int result)
{
    printf("두 수의 합은 %d 입니다.\n", result);
    printf("-----programming end-----\n");
}

void main()
{
    int a, b, hap;
    print_Start();
    scanf("%d%d", &a, &b);

    hap = Add(a, b);
    print_Hap(hap);

    return;
}


int Add(int i, int j)
{
    return i + j;
}
-----programming start-----
두 개의 정수를 입력하시오 : 3 5
두 수의 합은 8 입니다.
-----programming end-----

두 수를 입력 받아 최솟값과 최댓값을 출력하는 예제

#include <stdio.h>
void max_min(int i, int j);

int main()
{
    int a, b;
    printf("두 개의 정수를 입력하세요 : ");
    scanf("%d%d", &a, &b);
    max_min(a, b);
}

void max_min(int i, int j)
{
    if(i > j)
    {
        printf("최댓값 : %d  최솟값 : %d\n", i, j);
    }
    else if(j > i)
    {
        printf("최댓값 : %d  최솟값 : %d\n", j, i);
    }
    else 
    {
        printf("두 수의 값이 같습니다.\n");
    }
}

변수의 범위

지역 변수

같은 이름이더라도 다른 지역({})의 함수에 속해 있으면 독립된 다른 변수이다. 지역({})이 끝나게 되면 스택메모리에서 소멸된다. 스택 메모리에서 관리되므로,FILO 성격을 가진다.

전역 변수

전역변수는 프로그램이 시작하자 마자 메모리 상에 올라가서 프로그램이 종료될 때 메모리 상에서 소멸된다. 전역변수는 스택 메모리가 아닌 데이터 메모리에서 관리된다.

profile
Done is better than perfect

0개의 댓글