当非静态函数声明跟在静态函数声明之后会发生什么?

用户名

编译如下:

static int foo() { return 1; }
int foo();

但是,它将始终编译吗?在这种情况下,行为是否定义明确?当非静态原型遵循静态声明时,这意味着什么?

吊床

是的,它将编译并且行为已明确定义。由于foo声明static早于int foo();1,因此foo具有内部链接。

C11:6.2.2标识符的链接(p4):

对于extern在可见该标识符的先前声明的范围内用存储类说明符声明的标识符,31) 如果该先前声明指定了内部或外部链接,则该标识符在后面的声明中的链接与事先声明中规定的联系[...]

脚注指出:

31)根据6.2.1的规定,后面的声明可能会隐藏前面的声明。


1如果未指定存储类别,则假定该函数具有外部链接。Standard说:如果函数标识符的声明没有存储类说明符,则其链接的确定与使用存储类说明符extern-6.2.2(p5)声明的完全相同

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章