2016-09-01 10 views

答えて

3

答えはいいえです。 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がそのリンケージに影響すると言います(適用可能な記憶域はありません)。

3

C標準は、のストレージクラスの意味を正式に定義していません。それは、「記憶域クラス指定子が」何であるかを定義ん

は---それは、キーワードtypedefexternstatic_Thread_localautoregisterの一つです。

ファンクションは、ストレージクラス指定子externまたはstaticで宣言できます。

標準は、配列オブジェクトは、ストレージ・クラスを登録している場合は、動作が

を定義されていないが、それが定義されることはありません例えば

、いくつかの場所で、「ストレージ・クラス」を有するオブジェクトを言及しませんオブジェクトの記憶域クラス。これは宣言の1つに現れる記憶域クラス指定子のキーワードだと思うかもしれませんが、同じオブジェクトの宣言の中には記憶域クラス指定子があり、それ以外の宣言がないとどうなるかは不明です。また、記憶クラス指定子で宣言を持たないオブジェクトの記憶クラスは何であるか決して定義されません。

1つは完全にオブジェクトや関数の記憶クラスの話を避け、代わりに正確に標準で定義されている保管期間リンケージの関連概念を使用すべきであると思われます。必要に応じて、 "ストレージクラス指定子Xが宣言に表示されますが、"オブジェクト/関数にはストレージクラスXがありません "などのフレーズを使用します。

+0

私はあなたの答えが好きです... –

+0

私の解釈:「レジスタ記憶クラスを持っている」とは、「レジスタ記憶クラス指定子で宣言された」ことを意味し、標準で「記憶クラスを有する」という他のインスタンスは、 "記憶クラス"どちらの場合でも意図は明確です –

関連する問題