我读过this post,如何在C语言中的函数中使用static
说明符,但是我不明白是否有必要在函数的原型和定义中都使用它,或者可以将其省略定义。例如,在这种情况下:
static void foo(void);
void foo() {...}
foo
仅是内部链接还是这样的用法不正确?
答案 0 :(得分:2)
foo是否仅是内部链接或此类用法不正确?
6.2.2 Linkage of identifier状态:
对于在可见该标识符的先前声明的范围内用存储类说明符extern声明的标识符,31)如果该先前声明指定了内部或外部链接,则该标识符在后面的声明中的链接为与先前声明中指定的链接相同。
当foo
定义具有外部链接时(如果没有明确指定,则函数具有外部链接 1 ),此时,存在foo
的先前声明。内部链接可见。因此foo
具有内部链接。
1:
如果函数的标识符声明没有存储类说明符,则其链接的确定与使用存储类说明符extern声明时完全相同。如果对象标识符的声明具有文件范围并且没有存储类说明符,则其链接是外部的。
答案 1 :(得分:1)
在C中,整个函数具有默认的外部链接。如果对函数使用static关键字。它将链接从外部链接更改为内部内部链接。您可以使用“ static”关键字使该函数仅可用于其中定义的文件。仅此而已。
static void foo(void); // internal linkage
void foo(void); // external linkage
答案 2 :(得分:0)
您的用法完全可以。 foo
仅在当前正在编译的源文件中是已知的。