チュートリアルによると
ブロック内の関数を静的として宣言することはできません。
その理由は何ですか?それは機能にどのように影響しますか?
static
関数に適用される場合、関数に内部リンケージがあることを意味します。つまり、このファイル内でのみアクセスできます。つまり、file-scopeがあります。このリンケージは、関数を別の関数の内部で宣言するか、それらすべての外部で宣言するかに関係なく適用されます。
ここで、static
キーワードを別のブロック/関数内の関数宣言に適用すると、意味的に言えば、関数のスコープをその特定のブロック/関数に制限しようとしています。これは、そのstatic
関数を述べる言語規則に反します。宣言の場所には、ファイルスコープが必要です。
したがって、標準はそのような宣言を禁止している可能性があります。
PS:最新のC11標準状態の30
脚注-6.2.3
関数宣言にストレージ クラス指定子staticを含めることができるのは、 それがファイル スコープにある場合のみです。