C言語staticキーワードの検討( The "static" keyword is very strange, ・・・ )

#概要
C言語のstaticキーワードの仕様がわかりにくいと、多くの方が感じると思う。
staticキーワードに関して、調査した。
（**リッチー**さんのインタビューの引用を追記した :cake: )

#調査結果
##wikipediaより
staticキーワードに関しては、
wikipediaの整理がわかりやすいと思うので、
https://en.wikipedia.org/wiki/Static_(keyword)
を引用する。
3つの使い方が示されている。

>**Static global variable**
A variable declared as static at the top level of a source file (outside any function definitions) is only visible throughout that file ("file scope", also known as "internal linkage"). In this usage, the keyword static is known as an "access specifier".
>
>**Static function**
Similarly, a static function – a function declared as static at the top level of a source file (outside any class definitions) – is only visible throughout that file ("file scope", also known as "internal linkage").
>
>**Static local variables**
Variables declared as static inside a function are statically allocated, thus keep their memory cell throughout all program execution, while having the same scope of visibility as automatic local variables (auto and register), meaning remain local to the function. Hence whatever values the function puts into its static local variables during one call will still be present when the function is called again.

##何がわかりにくいのか
本来というか定義としては、
**storage class**
を示すものであるが、
それがなぜか、
**linkage**
に関しても示すことになっている点である。
（これに関しては、いろいろ調べたが、**合理的な説明はなく**、
**言語開発の歴史的(経緯的）にそうなったというか、歴史的にそうしてみたが、破綻してないので、いいのでは？**ぐらいのことだと思う。）

#C言語の仕様書で確認してみる
以下の仕様書を確認してみる。
http://www.dii.uchile.cl/~daespino/files/Iso_C_1999_definition.pdf
以下の抜粋のとおり、
storageclass speciﬁer staticで、internal linkageを示すと、
**堂々と説明している。。。。**
なんだそれ。。。。
言語開発の経緯的にそうなるんでしょう。。。。

>6.2.2 Linkages of identiﬁers

・・・

>3 If the declaration of a ﬁle scope identiﬁer for an object or a function contains the storageclass speciﬁer static, the identiﬁer has internal linkage.22)

#C Family Interview（2020/10/01追記）
以下のサイトのC言語の開発者の一人？の**リッチー**さんへのインタビュー（2000年）が載ってました。
**「static」キーワードは非常に奇妙**と、ご本人がコメントされています。


http://www.gotw.ca/publications/c_family_interview.htm

>The C Family of Languages: Interview with Dennis Ritchie, Bjarne Stroustrup, and James Gosling
This article appeared in Java Report, 5(7), July 2000 and C++ Report, 12(7), July/August 2000.

>The C family of languages--C, C++, and Java--has dominated commercial programming for over 30 years. Today, all three languages are at a turning point:

>Q: Did you ever add features that your users didn't appreciate as much as you did, and then have to deprecate or remove them later? What did you learn from the experience?
Ritchie: I added some things under some pressure from users that I don't think were done well. Enumeration types are a bit odd, bitfields are odder. The "static" keyword is very strange, expressing both a storage lifetime and what the standard calls "linkage" (external visibility). There are many odd bits here and there.
>
>I can't remember features I added that I had to remove except for some tiny bits, like the "entry" keyword.

一部Google翻訳
>Q：**ユーザーがあまり評価していない機能を追加し、後で非推奨にするか削除する必要があったことはありますか？ その経験から何を学びましたか？**
**リッチー**：ユーザーからのプレッシャーの下で、うまくいったとは思えないものをいくつか追加しました。 列挙型は少し奇妙で、ビットフィールドは奇妙です。 **「static」キーワードは非常に奇妙で、ストレージの有効期間と、標準で「リンケージ」（外部の可視性）と呼ばれるものの両方を表しています。** あちこちに奇妙なビットがたくさんあります。


#まとめ
特にありませんが、
ちょっと、理解不能な部分があると、言語の理解がそこから曖昧になることもあるので、**説明不能な部分は不能として確定したかった**ので、記事にしました。
コメントなどあればお願いします。