1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-29

#概要
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 specifier staticで、internal linkageを示すと、
堂々と説明している。。。。
なんだそれ。。。。
言語開発の経緯的にそうなるんでしょう。。。。

6.2.2 Linkages of identifiers

・・・

3 If the declaration of a file scope identifier for an object or a function contains the storageclass specifier static, the identifier has internal linkage.22)

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

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」キーワードは非常に奇妙で、ストレージの有効期間と、標準で「リンケージ」(外部の可視性)と呼ばれるものの両方を表しています。 あちこちに奇妙なビットがたくさんあります。

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

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?