块内的静态函数声明

Sne*_*S P 3 c

一个教程

您不能将块中的函数声明为静态.

是什么原因?它如何影响功能?

Pav*_*ath 5

static当应用于函数意味着该函数具有内部链接.即它只能在此文件中访问.换句话说,它具有文件范围.无论您是在另一个函数内部还是在所有函数之外声明函数,此链接都适用.

现在,如果将static关键字应用于另一个块/函数中的函数声明,从语义上讲,您试图将函数的范围限制为该特定的块/函数,这违反了表明static函数的语言规则,而不管他们的申报地点应有档案范围.

因此,标准可能会禁止这样的声明.

PS:脚注306.2.3最新C11标准明─

只有当函数声明位于文件范围时,它才能包含存储类说明符static ;