다음을 통해 공유


스토리지 클래스

함수 정의의 스토리지 클래스 지정자는 함수에 extern 또는 static 스토리지 클래스를 제공합니다.

구문

:
declaration-specifiersopt attribute-seqopt declarator declaration-listopt compound-statement

/* attribute-seq는 Microsoft 전용 */

:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt

storage-class-specifier: /* 함수 정의의 경우 */
extern
static

함수 정의에 storage-class-specifier가 포함되지 않은 경우 스토리지 클래스의 기본값은 extern입니다. 함수를 명시적으로 extern으로 선언할 수 있지만 반드시 그렇게 할 필요는 없습니다.

함수 선언에 storage-class-specifier extern이 포함된 경우 식별자의 링크가 파일 범위를 포함하는 식별자의 모든 표시되는 선언의 링크와 동일합니다. 파일 범위를 포함하는 표시되는 선언이 없는 경우 식별자에 외부 링크가 있습니다. 식별자에 파일 범위가 있으며 storage-class-specifier는 없는 경우 식별자에 외부 링크가 있습니다. 외부 링크는 식별자의 각 인스턴스가 동일한 개체 또는 함수를 표시함을 의미합니다. 링크 및 파일 범위에 대한 자세한 내용은 수명, 범위, 표시 유형 및 연결을 참조하세요.

extern이 아닌 스토리지 클래스 지정자를 포함하는 블록 범위 함수 선언은 오류를 발생시킵니다.

static 스토리지 클래스를 포함하는 함수는 정의된 소스 파일에서만 볼 수 있습니다. 다른 모든 함수는 extern 스토리지 클래스가 명시적으로 또는 암시적으로 제공된 경우 프로그램의 모든 소스 파일에서 표시됩니다. static 스토리지 클래스가 필요한 경우 함수가 처음으로 선언된 경우 및 함수가 정의된 경우 선언되어야 합니다.

Microsoft 전용

Microsoft 확장을 사용할 수 있을 때 함수 정의가 동일한 소스 파일에 있고 해당 정의가 명시적으로 스토리지 클래스를 지정하는 경우 원래 스토리지 클래스를 사용하지 않거나 extern 스토리지 클래스를 사용하여 선언된 함수에 staticstatic 스토리지 클래스가 지정됩니다.

/Ze 컴파일러 옵션을 사용하여 컴파일할 때 extern 키워드를 사용하여 블록 내에서 선언된 함수는 전역 표시 유형을 가지며, 이는 /Za를 사용하여 컴파일할 때 true가 아닙니다. 이 기능은 소스 코드의 이식성을 고려해야 하는 경우 사용할 수 없습니다.

Microsoft 전용 종료

참조

C 함수 정의