関数にはC言語のストレージクラスがありますか?関数はC言語のストレージクラスを持っていますか?
答えて
答えはいいえです。 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf(C99のドラフト)とhttp://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf(C11の案)によれば、オブジェクト
1の
6.2.4保管期間オブジェクトは、その寿命を決定貯蔵期間を有しています。
機能はオブジェクトではないため、ストレージはありません。識別子
3の
6.2.2リンケージオブジェクトまたは関数のファイルスコープ識別子の宣言が記憶クラス指定子
static
が含まれている場合、識別子は、内部結合を有します。
これは、関数に適用されたstatic
がそのリンケージに影響すると言います(適用可能な記憶域はありません)。
C標準は、のストレージクラスの意味を正式に定義していません。それは、「記憶域クラス指定子が」何であるかを定義ん
は---それは、キーワードtypedef
、extern
、static
、_Thread_local
、auto
とregister
の一つです。
ファンクションは、ストレージクラス指定子extern
またはstatic
で宣言できます。
標準は、配列オブジェクトは、ストレージ・クラスを登録している場合は、動作が
を定義されていないが、それが定義されることはありません例えば
、いくつかの場所で、「ストレージ・クラス」を有するオブジェクトを言及しませんオブジェクトの記憶域クラス。これは宣言の1つに現れる記憶域クラス指定子のキーワードだと思うかもしれませんが、同じオブジェクトの宣言の中には記憶域クラス指定子があり、それ以外の宣言がないとどうなるかは不明です。また、記憶クラス指定子で宣言を持たないオブジェクトの記憶クラスは何であるか決して定義されません。
1つは完全にオブジェクトや関数の記憶クラスの話を避け、代わりに正確に標準で定義されている保管期間とリンケージの関連概念を使用すべきであると思われます。必要に応じて、 "ストレージクラス指定子Xが宣言に表示されますが、"オブジェクト/関数にはストレージクラスXがありません "などのフレーズを使用します。
私はあなたの答えが好きです... –
私の解釈:「レジスタ記憶クラスを持っている」とは、「レジスタ記憶クラス指定子で宣言された」ことを意味し、標準で「記憶クラスを有する」という他のインスタンスは、 "記憶クラス"どちらの場合でも意図は明確です –
- 1. SegfaultがC言語のリンクリストを持っています
- 2. 関数は、Cプログラミング言語
- 3. C言語の関数ポインタ
- 4. C言語のstrcat関数
- 5. Neo4jスカラー関数(C言語)#
- 6. cプログラミング言語 - declare()関数
- 7. C言語-fscanf関数
- 8. 関数デコレータ(C言語)#
- 9. 私はC言語でbatファイル持っているバッチファイルで
- 10. ポインタを使ってC言語の関数から配列を返す
- 11. C++エコシステム用の関数言語はありますか?
- 12. 関数言語をC言語にコンパイルする
- 13. C言語の変数と関数
- 14. Cは、私はC言語でアプリケーションを1つ持っている
- 15. 常に関数宣言でデフォルト値を持っています
- 16. C言語:だから私は、このユーザ入力持っている機能
- 17. C言語での関数のモック?
- 18. C言語のvoid関数のreturn文
- 19. C言語で関数をシリアライズ
- 20. C言語の基本関数
- 21. C++のオブジェクトクラスの関係は、JavaやC#のように他の言語と異なっていますか?
- 22. main関数からdll(C++)関数をC言語で使用する方法#
- 23. 私はこの形式でコードを持っているC言語でファイル++
- 24. gcc CコンパイラはC言語で書かれていますか?
- 25. なぜC言語のgetchar()関数が整数ですか?
- 26. C言語を使ってGRUBの変数を変更する
- 27. PostgreSQL C言語関数の文字エンコードを変更します
- 28. 数学関数がC言語の "make"で動作しない
- 29. CSSは、私は言語メニュー、フラグ+テキストを持っているイメージ
- 30. List.clearは())私は、次のC#クラス/関数を持っている
これはどういう意味ですか? http://www.9wy.net/onlinebook/CPrimerPlus5/ch12lev1sec1.html –