- ベストアンサー
標準Cでのオブジェクト(変数)の定義について
標準Cのオブジェクト(変数)の定義に「その内容によって、値を表現することができる実行環境中の記憶域の領域。ビットフィールド以外のオブジェクトは、連続する1つ以上のバイトからなる。そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。 オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とありますが、具体的に何を指しているのかが解りません。以下のように疑問点をまとめました。 1、「そのバイトの個数、順序および符号化規則は、明示的に規定するかまたは処理系定義とする。」 Int型 long型 double型等を例に取ると、「処理系定義」はそのバイト数が4バイト8バイトと考えられますが、「明示的に規定する」とは、Int型 long型 double型等で具体的にどのような定義を指しているのでしょうか? 2、「オブジェクトを参照する場合、オブジェクトは、特定の型をもっていると解釈してもよい。」とは、具体的に一体何を言いたいのか解りかねます。「参照」とは何を指しているのか?ポインタを指しているのか、「ポインタを指している」としたならなぜそれをここに書き加える必要があるのか?それとも、もっと一般的な事をいっているのか?もしもっと一般的な事を言っているならそれは何なのか? 宜しく願います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すでに出ている回答と重複する部分もありますが... JIS X3010:2003の「6.2.6.1 一般規定」では、 「ビットフィールドの場合を除き, オブジェクトは1バイト以上の連続した並びから成る。その並びのバイト数, バイトの順序, 及び表現方法は, 明示的に規定するか, 又は処理系定義とする。」 となっています。 ここで、「明示的に規定する」ことがあるのは標準規格です。明示的に規定された具体例としては、charが1バイトであること、charを要素に持つ集成体(配列と構造体)のバイト順序、符号無し整数型や<stdint.h>で定義されるint32_t等の表現方法があります。 「3.14 オブジェクト(object)」に書かれた 「オブジェクトを参照する場合, オブジェクトは, 特定の型をもっていると解釈してもよい。」 については、「解釈してもよい」のは規格または処理系であって、プログラマではないことにまず注意してください。そして参照先である6.3.2.1は、左辺値・配列・関数指示子に関する記述ですから、配列名を参照するときにその配列の要素へのポインタ型であると解釈することがあってもよいという意味です。 ここで、「参照する」は処理系が参照するという意味で、おおむねそのオブジェクトを解釈するという意味になります。 標準規格は、どちらかといえば処理系の実装者向けに書かれていますので、プログラマ向けの記述だと考えていると意味が取れなくなります。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
ISO の規格にあたってみました. 英文では 3章の Term にある object の定義と 6.2.6.1 節 General の 2段落目が混ざっちゃってる感じですね. 以下勝手な解釈ですが.... 最初の質問は 6.2.6.1 の方で, 原文だと Except for bit-fields, ~ the number, order, and encoding of which are either explicitly specified or implementation-defined. となっていますから, 「あるものは規格で明示してあるし, その他については処理系定義である」という感じになると思います. 前者の例としては「char は 1バイト」が挙げられると思いますし, その他ほとんどのものは後者に属すると思います. 次の質問は 3章 Term の object の定義のところで NOTE にある When referenced, an object may be interpreted as having a particular type; see 6.3.2.1. の部分でしょう. 多分「参照するときには, オブジェクトが特定の型を持っていると解釈することもある」と, may を「~のこともある」のように訳した方が自然な感じがします. 6.3.2.1 は変換に関するところですから, もうちょっと言葉を足して「オブジェクトが (その本来の型によらず) 特定の型を~」とした方がいいのかもしれません. ここの「参照」は「(プログラム中で) 使う」くらいだと思います.
お礼
大変親切な説明有難うございました。特に”標準規格は、どちらかといえば処理系の実装者向けに書かれていますので、プログラマ向けの記述だと考えていると意味が取れなくなります。”という説明で全てが納得できたというかんじです。幾度もご回答いただきありがとうございました。