C言語のcalloc関数は確保した領域のすべてのビットは0になるそうです。
しかし、「int型やdouble型などの型ではすべてのビットが0の時は必ず値がxになる」というような規定があるのでしょうか?
追加の質問
これを調べようとJISX3010を見ようしたら有料でした。
無料で読めるCの規格(C99でなくてもよい, できれば日本語)はないでしょうか。
おすすめの方法を教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
基本的に、整数型であれば、0であると言えるが、
そうでない場合には特に規定はない様です。
詳細
C99のドラフトを見ると、
6.2.6 Representations of types
6.2.6.1 General
に、
The representations of all types are unspecified except as stated in this subclause.
という記述があるので、どの様に表現するかについては、基本的には余り規定がないようです。
その上で、
整数型については、
6.2.6.2 Integer types
の節に、
If there are N value bits, each bit shall represent a different power of 2 between 1 and 2^(N−1)
という記述があるので、全てのビットが0であれば0と考えて良いと思います。
浮動小数点とポインタについては、
7.22.3.2 The calloc function
に、
The calloc function allocates space for an array of nmemb objects, each of whose size
is size. The space is initialized to all bits zero.296)
とあり、その注293には、
Note that this need not be the same as the representation of floating-point
zero or a null pointer constant.
とあるので、全てのビットを0にしても、浮動小数点の0だったり空ポインタであったりする保証は
ない様です。
ちなみにJIS X 3010:2003で同様の個所を引用すると、
以下の個所です。
6.2.6.1 一般的規定
すべての型の表現は,6.2.6 に規定されているものを除き,未規定とする。
6.2.6.2 整数型
N個の値ビットがある場合,それぞれのビットは 1 から 2N−1までの,異なる 2 のべきを表現しなければならない。
7.20.3.1 calloc関数
calloc 関数は,大きさが size であるオブジェクトの nmemb 個の配列の領域を割り付ける。
その領域のすべてのビットは,0 で初期化する(※251)。
に対する注251
ここでの表現は,浮動小数点数の 0 の表現や空ポインタ定数の表現と同じである必要はない。
投稿2015/08/27 07:46
総合スコア1546
0
intについては全ビットをゼロにすれば値もゼロですが、浮動小数やポインタではゼロだと保証されません。
MEM09-C. メモリ割り当て関数がメモリを初期化すると仮定しない
もっとも、IEEE 754形式ではゼロクリアしたものが0として評価されますし、ポインタもヌルポインタ=0となる環境が多いので、実用上はそのまま通ってしまうことも多いです。
投稿2015/08/27 04:55
総合スコア145183
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
追加の質問への回答。
JIS規格票は、
http://www.jisc.go.jp/app/JPS/JPSO0020.html
で、ブラウザ上での参照だけなら出来ます。ダウンロードや印刷は出来ないです。
投稿2015/08/27 05:32
総合スコア84538
0
http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1570.pdf
C11のドラフト文書です。
以前私も同じような疑問を感じてはてなで質問したことがあり、
http://q.hatena.ne.jp/1147241365
intは規格上では
・+32767~-32767が表現可能であること
・sizeof short <= sizeof int <= sizeof longであること
しか定められていません。
と回答をもらいました。
投稿2015/08/27 04:24
総合スコア5568
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/27 08:06