C 함수 정의

함수 정의는 함수의 이름, 받아야 하는 매개 변수의 형식과 개수 및 반환 형식을 지정합니다. 함수 정의는 지역 변수의 선언과 함수의 기능을 결정하는 문이 있는 함수 본문도 포함합니다.

구문

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* 외부(파일) 범위에만 허용됨 */
function-definition
declaration

function-definition:
declaration-specifiersoptattribute-seqoptdeclaratordeclaration-listoptcompound-statement

/* attribute-seq는 Microsoft 전용 */

프로토타입 매개 변수인 경우:

declaration-specifiers:
storage-class-specifierdeclaration-specifiersopt
type-specifierdeclaration-specifiersopt
type-qualifierdeclaration-specifiersopt

declaration-list:
declaration
declaration-list declaration

declarator:
pointeroptdirect-declarator

direct-declarator: /* 함수 선언자 */
direct-declarator(parameter-type-list) /* 새 스타일 선언자 */
direct-declarator(identifier-listopt) /* 사용되지 않는 스타일 선언자 */

정의의 매개 변수 목록에서는 다음 구문을 사용합니다.

parameter-type-list: /* 매개 변수 목록 */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiersabstract-declaratoropt

이전 스타일의 함수 정의에 있는 매개 변수 목록에서는 다음 구문을 사용합니다.

identifier-list: /* 사용되지 않는 스타일의 함수 정의 및 선언에 사용됨 */
identifier
identifier-list , identifier

함수 본문에 대한 구문은 다음과 같습니다.

compound-statement:
{declaration-listoptstatement-listopt}

함수 선언을 수정할 수 있는 유일한 스토리지 클래스 지정자는 externstatic 입니다. extern 지정자는 다른 파일에서 함수를 참조할 수 있음을 나타냅니다. 즉, 함수 이름이 링커로 내보내집니다. static 지정자는 다른 파일에서 함수를 참조할 수 없음을 나타냅니다. 즉, 이름이 링커에 의해 내보내지지 않습니다. 스토리지 클래스가 함수 정의에 없을 경우 extern으로 간주됩니다. 어떤 경우이든 함수는 정의 지점에서 파일의 끝까지 항상 표시됩니다.

선택적 declaration-specifiers 및 필수 declarator는 함께 함수의 반환 형식 및 이름을 지정합니다. declarator는 함수를 명명하는 식별자와 함수 이름 뒤에 나오는 괄호의 조합입니다. 선택적 attribute-seq 비터미널은 함수 특성에 정의된 Microsoft 고유의 기능입니다.

declarator 구문의 direct-declarator는 정의될 함수의 이름과 매개 변수의 식별자를 지정합니다. direct-declaratorparameter-type-list가 포함된 경우 목록은 모든 매개 변수의 형식을 지정합니다. 이러한 선언자는 이후의 함수 호출을 위해 함수 프로토타입의 역할도 합니다.

함수 정의의 declaration에 있는 declaration-list에는 storage-class-specifier가 아닌 register가 포함될 수 없습니다. register 스토리지 클래스가 int 형식의 값에 지정된 경우에만 declaration-specifiers 구문에서 type-specifier를 생략할 수 있습니다.

compound-statement는 지역 변수 선언, 외부에서 선언된 항목에 대한 참조 및 문이 포함된 함수 본문입니다.

함수 특성, 스토리지 클래스, 반환 형식, 매개 변수함수 본문 섹션에서는 함수 정의의 구성 요소에 대해 자세히 설명합니다.

참조

함수