编译如下:
static int foo() { return 1; }
int foo();
但是,它将始终编译吗?在这种情况下,行为是否定义明确?当非静态原型遵循静态声明时,这意味着什么?
是的,它将编译并且行为已明确定义。由于foo
声明static
早于int foo();
1,因此foo
具有内部链接。
对于
extern
在可见该标识符的先前声明的范围内用存储类说明符声明的标识符,31) 如果该先前声明指定了内部或外部链接,则该标识符在后面的声明中的链接与事先声明中规定的联系。[...]
脚注指出:
31)根据6.2.1的规定,后面的声明可能会隐藏前面的声明。
1。如果未指定存储类别,则假定该函数具有外部链接。Standard说:如果函数标识符的声明没有存储类说明符,则其链接的确定与使用存储类说明符extern
-6.2.2(p5)声明的完全相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句