3

チュートリアルによると

ブロック内の関数を静的として宣言することはできません。

その理由は何ですか?それは機能にどのように影響しますか?

4

1 に答える 1

5

static関数に適用される場合、関数に内部リンケージがあることを意味します。つまり、このファイル内でのみアクセスできます。つまり、file-scopeがあります。このリンケージは、関数を別の関数の内部で宣言するか、それらすべての外部で宣言するかに関係なく適用されます。

ここで、staticキーワードを別のブロック/関数内の関数宣言に適用すると、意味的に言えば、関数のスコープをその特定のブロック/関数に制限しようとしています。これは、そのstatic関数を述べる言語規則に反します。宣言の場所には、ファイルスコープが必要です。

したがって、標準はそのような宣言を禁止している可能性があります。

PS:最新のC11標準状態の30脚注-6.2.3

関数宣言にストレージ クラス指定子staticを含めることができるのは、 それがファイル スコープにある場合のみです。

于 2012-07-12T09:24:26.547 に答える