以下编译:
static int foo() { return 1; }
int foo();
Run Code Online (Sandbox Code Playgroud)
但是,它会一直编译吗?这种情况下的行为是否定义得很好?当非静态原型遵循静态声明时,它意味着什么?
hac*_*cks 14
是的,它将编译并且行为定义明确.由于早于1foo宣布,具有内部联系. staticint foo();foo
对于使用该标识符
extern的先前声明可见的作用域中的存储类说明符声明的标识符,31) 如果先前声明指定内部或外部链接,则后面声明中的标识符的链接与在先前声明中指定的联系.[...]
脚注说:
31)如6.2.1中所述,后面的声明可能隐藏先前的声明.
1.如果未指定存储类,则假定该函数具有外部链接.标准说:如果函数的标识符声明没有存储类说明符,则确定其链接与使用存储类说明符extern- 6.2.2(p5)声明的完全相同.