basic/c

[C] 함수 작성 시 매개변수의 기본 값 지정?

공부하곰 2025. 2. 6. 14:37
728x90
반응형

문제 상황: 함수의 매개변수에 기본 값을 넣으려고 했는데 구문 오류(Syntax Error) 발생... ;;;;

void ShowAddResult(int num = 30)
{
    printf("덧셈결과 출력 : %d\n", num);
}

 

알고보니 C에서는 매개변수의 기본값(default parameter)을 지정할 수 없다고 한다.

kotlin이나 C++에서는 다 됐어서 몰랐다.

암튼 C에서는 지원하지 않는 기능이라고 함.


📌 기본값을 지정할 수 없는 이유

C는 함수 호출 시 컴파일러가 전달되는 인자의 개수를 그대로 기대하기 때문.

즉, 매개변수의 개수를 엄격하게 검사하기 때문에 기본값을 지정하는 기능이 없다.

매개변수 전체가 다 값이 들어왔는지 확인하는 거 같음.

 

✅ 해결 방법 1: 오버로딩 대신 함수 내부에서 처리

C에서는 함수 오버로딩도 지원하지 않기 때문에 함수 내부에서 기본값을 설정하는 방식으로 해결해야 한다.

#include <stdio.h>

void ShowAddResult(int num) {
    if (num == 0)  // 0이 입력되었다면 기본값으로 변경
        num = 300; 
    
    printf("덧셈결과 출력 : %d\n", num);
}

int main() {
    ShowAddResult(100);  // 100을 전달 -> 출력: "덧셈결과 출력 : 100"
    ShowAddResult(0);    // 0을 전달 -> 내부에서 300으로 변경 -> 출력: "덧셈결과 출력 : 300"
    return 0;
}

💡설명

  • ShowAddResult(0)처럼 0을 전달하면 함수 내부에서 300으로 변경해서 사용하도록 구현
  • 이 방법은 특정 값을 전달하면 기본값으로 처리하는 트릭이다.
  • 단점: 그 특정 값을 유효한 입력으로 사용하고 싶다면 이 방법이 적절하지 않음.

 

✅ 해결 방법 2: 매개변수를 두 개 사용해서 기본값을 지정

함수 호출 시 "기본값 사용 여부"를 판단하는 매개변수를 추가.

#include <stdio.h>

void ShowAddResult(int num, int useDefault) {
    if (useDefault)  
        num = 300; 
    
    printf("덧셈결과 출력 : %d\n", num);
}

int main() {
    ShowAddResult(100, 0); // 100을 사용 -> 출력: "덧셈결과 출력 : 100"
    ShowAddResult(0, 1);   // 기본값(300) 사용 -> 출력: "덧셈결과 출력 : 300"
    return 0;
}

💡설명

  • useDefault 매개변수를 추가해서 기본값을 적용할지 여부를 정함
  • ShowAddResult(0, 1)처럼 호출하면 num = 300;으로 설정됨.

 

✅ 해결 방법 3: 함수 포인터 + 매크로 활용 (가독성 개선)

C에서는 기본값을 직접 설정할 수 없으므로, 매크로와 함수 포인터를 활용하는 방법도 있음.

#include <stdio.h>

#define DEFAULT_VALUE 300  // 기본값을 매크로로 정의

void ShowAddResult(int num) {
    printf("덧셈결과 출력 : %d\n", num);
}

// 기본값을 적용하는 래퍼 함수
void ShowAddResultWithDefault() {
    ShowAddResult(DEFAULT_VALUE);
}

int main() {
    ShowAddResult(100);       // 100 사용 -> 출력: "덧셈결과 출력 : 100"
    ShowAddResultWithDefault(); // 기본값 300 사용 -> 출력: "덧셈결과 출력 : 300"
    return 0;
}

💡설명

  • DEFAULT_VALUE를 매크로로 정의해서 가독성을 높임.
  • ShowAddResultWithDefault()라는 기본값을 적용하는 별도의 함수를 만들어서 해결.

📌 정리

C에서는 기본 매개변수(default parameter)를 지원하지 않음.

✅ 해결 방법

  1. 함수 내부에서 특정 값(예: 0)을 입력받으면 기본값을 설정
  2. 매개변수를 하나 더 추가해서 기본값을 사용할지 여부를 결정
  3. 매크로 + 래퍼 함수를 활용해서 기본값을 적용하는 방법

내 사담

Kotlin과 매우 다른 너낌... 객체 지향 언어가 아니고 함수 오버로딩도 안 된다.

Kotlin, Python 쓰다가 C쓰려니 너무 구닥다리 같다. 학교에서도 안 배운 건데... 흐음

728x90
반응형