함수 프로토타입

함수 선언 함수 정의 앞에 및 이름, 반환 형식, 저장소 클래스 및 함수가 다른 특성을 지정 합니다.함수 선언은 프로토타입 수를 형식 및 함수 인수에 대 한 식별자도 설정 해야 합니다.

구문

  • declaration:
    선언 지정자 특성 seq 선택init 선언 자 목록 선택**;**

    / * 특성이 seq 선택 Microsoft 관련 된 * /

  • 선언 지정자:
    저장소 클래스 지정자 선언 지정자 선택

    형식 지정 자가 선언 지정자 선택

    형식 한정자 선언 지정자 선택

  • init 선언 자 목록:
    초기화를 선언 자

    init 선언 자 목록 , init 선언 자

  • 초기화를 선언 자:
    선언 자

    선언 자가 이니셜라이저를 =

  • declarator:
    포인터 선택직접 선언 자

  • 직접 자가: / * 함수 선언 자 * /
    직접 자가 ( 매개 변수 유형 목록 ) / * 새 스타일 선언 자 * /

    직접 자가 ( 식별자 목록 선택**)** / * Obsolete 스타일의 선언 자를 * /

닫는 괄호 바로 다음 세미콜론으로 종료 되 고 본문이 없습니다. 따라서 제외 하는 함수 정의와 같은 폼 프로토타입은.두 경우 모두 반환 형식이 함수 정의에 지정 된 반환 형식으로 동의 해야 합니다.

함수 프로토타입 다음 중요 한 용도가 있습니다.

  • 반환 형식 이외의 형식을 반환 하는 함수에 대 한 설정 int.함수는 반환 하지만 int 값이 프로토타입이 필요 없음, 프로토타입은 것이 좋습니다.

  • 전체 프로토타입의 표준 변환으로 이루어진 없이 형식이 나 개수의 인수 매개 변수 수를 확인 하지 않습니다.

  • 프로토타입은 이러한 함수를 정의 하기 전에 함수에 대 한 포인터를 초기화 하는 데 사용 됩니다.

  • 매개 변수 목록이 일치 함수 정의에 매개 변수가 있는 함수 호출에 인수 확인을 위해 사용 됩니다.

각 매개 변수에 변환 된 해석 함수 호출 스택에 배치 된 인수의 결정 합니다.인수 및 매개 변수 간에 형식이 일치 하지 않습니다 인수를 스택에 잘못 해석 될 수 발생할 수 있습니다.예를 들어, 16 비트 컴퓨터에서 16 비트 포인터를 인수로 전달 하는 경우 다음 선언으로 매개 변수를 스택에 첫 번째 32 비트 해석으로 매개 변수.이 오류는 문제가 있는 매개 변수를 하지만 그 뒤에 나오는 모든 매개 변수를 사용 합니다.모든 함수에 대 한 완료 함수 프로토타입 선언 하 여 이러한 종류의 오류를 검색할 수 있습니다.

인수 형식 및 반환 형식 불일치에 대 한 정의 앞에 (또는 다른 소스 파일에서 발생) 함수 호출을 확인할 수 있도록 프로토타입을 함수의 특성을 설정 합니다.예를 들어, 사용자가 지정 하는 경우는 정적 저장소 클래스 지정자는 프로토타입의 또한 지정 해야의 정적 저장소 클래스 함수 정의에.

매개 변수 선언이 완료 (int a) 추상 선언 자와 함께 사용할 수 있습니다 (int) 같은 선언 합니다.예를 들어, 다음 선언은 잘못 되었습니다.

int add( int a, int );

프로토타입을 종류를, 및 식별자를 인수로 전달 된 각 식에 모두 포함할 수 있습니다.그러나 이러한 식별자 선언 끝까지만 범위가 있습니다.프로토타입을 인수의 변수 또는 인수 전달 됩니다 사실 또한 반영할 수 있습니다.이 관련 된 진단 메시지가 컴파일러 생성 그러한 목록은 사용 하지 않고 불일치, 표시할 수 있습니다지 않습니다.참조 하십시오 인수가 형식 검사에 대 한 자세한 내용은.

프로토타입 범위에서 Microsoft C 컴파일러 이제 ANSI 호환 /Za 컴파일러 옵션으로 컴파일할 때입니다.선언 하 여 따라서는 struct 또는 union 태그는 프로토타입 태그 내에서 전역 범위 대신 해당 범위에서 입력 한.예를 들어, /Za ANSI 호환성을 사용 하 여 컴파일할 때 절대로이 함수를 형식 불일치 오류가 받지 않고 호출할 수 있습니다.

void func1( struct S * );

코드를 해결 하려면 정의 또는 선언에서 struct 또는 union 함수 프로토타입 앞의 전역 범위:

struct S;
void func1( struct S * );

/Ze가 지정 된 경우, 전역 범위에 여전히 태그를 입력 합니다.

참고 항목

개념

함수 (C)