스태틱 함수에 C의 프로토타입에 static 키워드가 필요합니까?
C 프로그래밍 북에 따르면 정적 함수를 만들려면 함수 정의 앞에 static 키워드를 붙여야 합니다.시제품에 대한 명확한 언급은 없습니다.또한 이 예에서는 프로토타입을 사용하지 않고 파일 맨 위에 정적 기능을 배치하기만 하면 됩니다(예상으로는 프로토타입을 필요로 하지 않습니다).
그러면 정적 함수에 static 키워드가 프로토타입에 필요할까요?아니면 정의 앞에만 넣어야 하나요?
아니요. 함수 선언(프로토타입 또는 정의)에서는 키워드를 생략할 수 있습니다.static
와 같은 기능의 선언이 또 이루어진 후일 경우static
.
있다면static
함수의 선언, 함수의 첫 선언은static
.
ISO/IEC 9899:1999, 6.7.1에 정의되어 있습니다.
[...] 함수에 대한 파일 범위 식별자 선언에 저장소 클래스 지정자가 포함된 경우
static
ID에는 내부 링크가 있습니다.[...]
스토리지 클래스 지정자로 선언된 식별자의 경우
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
'IT이야기' 카테고리의 다른 글
Vuex 맵 상태가 정의되지 않음 상태 (0) | 2022.07.24 |
---|---|
va_list를 사용한 printf 호출 (0) | 2022.07.24 |
후드 아래에서 예외는 어떻게 구현됩니까? (0) | 2022.07.23 |
'int main(){return(0); }'의 부동소수점 예외(SIGFPE) (0) | 2022.07.23 |
Vue: 새로운 사후 대응 속성을 추가하기 위한 다른 옵션? (0) | 2022.07.23 |