w1r*_*res 43 c static-functions
我的C编程书说当我想创建一个静态函数时,我需要将static关键字放在函数定义的前面.它没有明确提及原型.此外,这些示例不使用原型,只是将静态函数放在文件的顶部(这样它们就不需要我假设的原型).
那么,静态函数是否需要原型的static关键字?或者我只把它放在定义的前面?
und*_*gor 46
不可以.函数声明(原型甚至定义)可以省略关键字,static
如果它出现在另一个相同函数的声明之后static
.
如果有static
一个函数声明,它的第一个声明必须是static
.
它在ISO/IEC 9899:1999,6.7.1中定义:
如果函数的文件范围标识符的声明包含存储类说明符
static
,则标识符具有内部链接.[...]
对于使用
extern
范围内的存储类说明符声明的标识符,其中该标识符的先前声明是可见的,如果先前声明指定内部或外部链接,则后面声明中的标识符的链接与指定的链接相同在先前的声明.[...]
如果功能的标识符的声明不具有存储类说明,其连接是精确地确定,如同其在与存储类说明中声明
extern
.[...]
如果在翻译单元内,同一标识符同时出现内部和外部链接,则行为未定义.
所以,例如这是有效的:
static void foo(void);
void foo(void);
static void foo(void) { }
Run Code Online (Sandbox Code Playgroud)
这个也是:
static void foo(void) { }
void foo(void);
static void bar(void);
void bar(void) {}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不正确:
void foo(void);
static void foo(void) { }
Run Code Online (Sandbox Code Playgroud)
通常情况下,您也应该拥有static
原型(因为它们通常是第一个).
归档时间: |
|
查看次数: |
17182 次 |
最近记录: |