Namespaces
Variants

Functions

From cppreference.net

함수는 C 언어 구성 요소로, 복합 문장 (함수 본체)을 식별자 (함수 이름)와 연결합니다. 모든 C 프로그램은 main 함수 에서 실행을 시작하며, 이는 종료되거나 다른 사용자 정의 또는 라이브러리 함수를 호출합니다.

// 함수 정의
// "sum"이라는 이름의 함수를 정의하며 함수 본문은 "{ return x+y; }"입니다
int sum(int x, int y) 
{
    return x + y;
}

함수는 function declaration 또는 function definition 으로 도입됩니다.

함수는 0개 이상의 매개변수(parameters) 를 받을 수 있으며, 이는 함수 호출 연산자 인수(arguments) 로부터 초기화됩니다. 또한 return 문 을 통해 호출자에게 값을 반환할 수 있습니다.

int n = sum(1, 2); // 매개변수 x와 y가 인수 1과 2로 초기화됨

함수의 본문은 함수 정의 에서 제공됩니다. 각 non- inline (since C99) 함수는 표현식에서 사용되는 경우 ( 평가되지 않는 경우 를 제외하고) 프로그램에서 한 번만 정의 되어야 합니다.

중첩 함수는 없습니다(비표준 컴파일러 확장을 통해 허용되는 경우 제외): 각 함수 정의는 파일 범위에 나타나야 하며, 함수는 호출자의 지역 변수에 접근할 수 없습니다:

int main(void) // main 함수 정의
{
    int sum(int, int); // 함수 선언 (어떤 스코프에서도 나타날 수 있음)
    int x = 1;  // main의 지역 변수
    sum(1, 2); // 함수 호출
//    int sum(int a, int b) // 오류: 중첩 함수 불가
//    {
//        return  a + b; 
//    }
}
int sum(int a, int b) // 함수 정의
{
//    return x + a + b; // 오류: main의 x는 sum 내에서 접근 불가
    return a + b;
}

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 6.7.7.4 Function declarators (including prototypes) (p: TBD)
  • 6.9.2 Function definitions (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 6.7.6.3 함수 선언자 (프로토타입 포함) (p: 96-98)
  • 6.9.1 함수 정의 (p: 113-115)
  • C11 표준 (ISO/IEC 9899:2011):
  • 6.7.6.3 함수 선언자 (프로토타입 포함) (p: 133-136)
  • 6.9.1 함수 정의 (p: 156-158)
  • C99 표준 (ISO/IEC 9899:1999):
  • 6.7.5.3 함수 선언자 (프로토타입 포함) (p: 118-121)
  • 6.9.1 함수 정의 (p: 141-143)
  • C89/C90 표준 (ISO/IEC 9899:1990):
  • 3.5.4.3 함수 선언자 (프로토타입 포함)
  • 3.7.1 함수 정의

참고 항목

C++ 문서 참조: 함수 선언