nullvuild

Bloger @nullvuild

Created Date '2025/03/24 오전 11:48

Modified Date '2025/03/24 오전 11:50

#C언어 #함수 #반환값 #매개변수

프로그래밍을 하다 보면 같은 코드를 여러 번 쓰게 되는 경우가 생긴다.

이럴 때 매번 똑같이 코드를 복붙하는 대신, 공통 동작을 묶어서 함수(Function)로 만들어두면 훨씬 깔끔하고 효율적이다.

함수를 만들어두면, 필요한 곳에서 계속 불러 쓸 수 있는 코드 조각이다.


1. 함수의 기본 구조

C언어에서 함수는 아래와 같은 구조로 작성된다.

반환형 함수이름(매개변수들) {
    실행할 코드;
    return 반환값;
}

예를 들어, 두 수를 더해주는 함수는 이렇게 만들 수 있다.


int add(int a, int b) {
    int sum = a + b;
    return sum;
}

이 함수는 정수 a와 b를 받아서 더한 값을 int 타입으로 반환한다.


a, b, sum은 같은 int타입이여야 원하는대로 동작한다. 물론, 의도에 따라 형변환을 하기도 하지만 이 글에서는 다루지 않는다.

사용할 때는 이렇게 부르면 된다.


int result = add(3, 5);
printf("결과: %d\n", result);  // 출력: 결과: 8

2. 매개변수(Parameter)와 인자(Argument)

함수 선언에서 괄호 안에 들어가는 변수들은 매개변수(파라미터, Parameter)이고,

함수를 호출할 때 전달하는 실제 값들은 인자(Argument)라고 한다.


void greet(char name[]) {
    printf("안녕하세요, %s님!\n", name);
}

greet("철수");  // 인자로 "철수"를 전달

함수 안에서 name이라는 매개변수를 사용해 인사 메시지를 출력할 수 있다.



3. 반환값(Return)

함수가 실행된 후 어떤 값을 되돌려주고 싶을 때는 return 문을 사용한다.

return 뒤에 오는 값은 함수의 호출자에게 전달된다.


int square(int n) {
    return n * n;
}

함수를 호출한 쪽에서는 이 반환값을 받아서 자유롭게 활용할 수 있다.


4. void 함수: 반환값이 없는 경우

반환할 값이 없다면 함수의 반환형을 void로 선언한다.

return 문은 생략하거나 그냥 return; 만 써도 된다.


void printHello() {
    printf("Hello!\n");
}

이 함수는 단순히 메시지를 출력할 뿐, 어떤 값도 돌려주지 않는다.


return을 생략해도 되는 것은 void로 선언한 함수의 특징이다.

5. 함수의 장점

함수를 쓰면 다음과 같은 이점이 있다.


  • 코드 재사용성: 중복을 줄이고 깔끔한 코드 유지
  • 가독성: 각 기능이 명확히 분리되어 이해하기 쉬움
  • 유지보수 용이: 하나만 고치면 전부 반영됨
  • 테스트 및 디버깅 쉬움: 개별 단위로 테스트 가능

6. 함수 선언과 정의의 분리

함수를 파일 상단에서 미리 선언해두고, 실제 내용(정의)은 아래쪽에 둘 수도 있다.

이걸 함수 프로토타입이라고 부른다.


// 함수 선언
int multiply(int x, int y);

int main() {
    printf("%d\n", multiply(3, 4));
    return 0;
}

// 함수 정의
int multiply(int x, int y) {
    return x * y;
}

이 구조는 헤더파일로 함수 선언을 따로 분리하는 데도 사용된다.


현업에서는 함수들을 한 눈에 보기 위해 사용하기도 하고, 중요한 함수라서 정의를 빠뜨리지 않기 위해서 사용하기도 한다.

7. 함수와 메모리

C언어에서 함수 호출 시 매개변수는 기본적으로 값에 의한 복사(pass-by-value)로 전달된다.

즉, 함수 내부에서 인자를 바꿔도 원래 변수엔 영향을 주지 않는다.


void change(int n) {
    n = 100;
}

int main() {
    int x = 5;
    change(x);
    printf("%d\n", x);  // 출력: 5
}

change() 함수 안에서 값을 바꿨지만, x의 값은 그대로다.

원본 변수에 영향을 주고 싶다면 포인터를 사용해야 하는데, 이건 다음 챕터에서 다룬다.


C언어의 변수 처리 방식 vs Python의 변수 처리 방식

Python을 먼저 배웠거나 익숙한 사람이라면, C언어에서 함수에 처리한 변수가 적용되지 않는 것이 낯설게 느껴질 수 있다.

그 이유는 두 언어가 값을 다루는 방식 자체가 다르기 때문이다.

C언어도 Python과 같이 처리할 수 있지만, 이는 독특한 방식을 이용하고 다른 글에서 정리한다.


코멘트

함수는 프로그램을 구조적으로 설계할 수 있게 해주는 중요한 개념이다.

단순한 계산에서부터, 나중에는 포인터, 구조체, 파일처리 등 복잡한 로직을 나눌 때도 꼭 필요한 도구다.

지금 개념을 확실히 익혀두면, 나중에 함수 기반 설계를 할 때도 훨씬 편해진다.

Nullvuild

Nullvuild

@nullvuild

프로필