IT이야기

스태틱 함수에 C의 프로토타입에 static 키워드가 필요합니까?

cyworld 2022. 7. 24. 22:09
반응형

스태틱 함수에 C의 프로토타입에 static 키워드가 필요합니까?

C 프로그래밍 북에 따르면 정적 함수를 만들려면 함수 정의 앞에 static 키워드를 붙여야 합니다.시제품에 대한 명확한 언급은 없습니다.또한 이 예에서는 프로토타입을 사용하지 않고 파일 맨 위에 정적 기능을 배치하기만 하면 됩니다(예상으로는 프로토타입을 필요로 하지 않습니다).

그러면 정적 함수에 static 키워드가 프로토타입에 필요할까요?아니면 정의 앞에만 넣어야 하나요?

아니요. 함수 선언(프로토타입 또는 정의)에서는 키워드를 생략할 수 있습니다.static와 같은 기능의 선언이 또 이루어진 후일 경우static.

있다면static함수의 선언, 함수의 첫 선언은static.

ISO/IEC 9899:1999, 6.7.1에 정의되어 있습니다.

[...] 함수에 대한 파일 범위 식별자 선언에 저장소 클래스 지정자가 포함된 경우staticID에는 내부 링크가 있습니다.

[...]

스토리지 클래스 지정자로 선언된 식별자의 경우extern그 식별자의 사전 선언이 보이는 범위에서, 사전 선언이 내부 또는 외부 링크를 지정하는 경우, 그 후의 선언에서의 식별자의 링크는 이전 선언에서 지정된 링크와 동일하다.

[...]

함수의 식별자 선언에 스토리지 클래스 지정자가 없는 경우 해당 링크는 스토리지 클래스 지정자로 선언된 것과 동일하게 결정됩니다.extern.

[...]

변환 유닛 내에서 내부 링크와 외부 링크 모두에서 동일한 식별자가 표시될 경우 동작은 정의되지 않습니다.

예를 들어, 이것은 유효합니다.

static void foo(void);
void foo(void);
static void foo(void) { }

이것도.

static void foo(void) { }
void foo(void);

static void bar(void);
void bar(void) {}

그러나 이 코드는 올바르지 않습니다.

void foo(void);
static void foo(void) { }

일반적으로는 다음과 같은 기능을 가지고 있어야 합니다.static(보통 그들이 먼저이기 때문에) 시제품에서도 마찬가지입니다.

네, 네, 선언문 앞에 정적인 것을 넣으셔야 합니다.

이것을 ideone.com 에 입력합니다.

int add();
int main(){
    printf("%d",add());
    return 0;
}

static int add(){
    return 1+1;
}

다음과 같은 결과를 얻을 수 있습니다.http://ideone.com/VzZCiE

이제 이것을 입력하세요.

static int add();
int main(){
    printf("%d",add());
    return 0;
}

static int add(){
    return 1+1;
}

http://ideone.com/sz8HVR 를 참조해 주세요.

쾅거리다

언급URL : https://stackoverflow.com/questions/15670010/does-a-static-function-need-the-static-keyword-for-the-prototype-in-c

반응형