質問
C++においてNULL
は0LL
と定義されていますがなぜint
はなくlong long int
なのでしょうか。
###環境
OS : Windows 10 Home
コンパイラ : gcc 8.1.0
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答3件
7
ベストアンサー
C++ の仕様は NULL
が 0LL
であることを要求していません。 処理系定義ということになっています。
処理系定義というのは、定められた性質を満たす範囲で処理系の都合によって選択してもよいという意味で、この場合では単に 0
として定義しても仕様は満たされるはずです。
0LL
という定義をしている処理系があるのならそれは処理系の都合 (言語仕様の要求ではない) なので、各環境における個別の事情を見ないと具体的な回答は出来ません。 私が予想できる事情としては、可変長引数の関数において既定の実引数拡張のルールと辻褄を合わせるためには NULL
がポインタの幅と一致していないとスタックがずれるということはありえるかもしれない……といったくらいです。
投稿2020/11/21 09:44
総合スコア5038
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
1
ヌルポインタを示すためにNULLを用いていました。
その為、ポインタが64bit環境では、long long intになっているのだと思います。
c++11からは、nullptrを使うことが推奨されています。
投稿2020/11/21 11:30
総合スコア813
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
0
近頃のC++において、ポインタ値としての0はNULLではなくnullptr
です。
※ NULLはCとの互換性のため
投稿2020/11/21 08:41
総合スコア16150
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
関連した質問
Q&A
解決済
C言語でIFFTを実装したい
回答1
クリップ0
更新
2023/03/22
Q&A
解決済
Arduino タイマー割り込みを使って2つのピンで矩形波を生成しDuty比を変更する
回答2
クリップ1
更新
2023/03/12
Q&A
解決済
数字群を二つのグループに分けて、それぞれの合計値の差が最小になるアルゴリズムを知りたい。
回答5
クリップ1
更新
2023/03/18
Q&A
解決済
Javaの文字列結合時、nullの場合に文字列結合の対象から外したい
回答4
クリップ0
更新
2023/03/13
Q&A
受付中
被らずに整数を表示させる方法知りたいです。
回答5
クリップ0
更新
2023/03/19
Q&A
解決済
AtCoderのC++入門の問題について。
回答2
クリップ0
更新
2023/03/27
Q&A
解決済
1986-1-12 00:00:00.0 と出力されてしまうのを, SimpleDateFormat("yyyy-MM-dd");のパターンに直したい
回答2
クリップ0
更新
2023/03/24
意見交換
受付中
[Java]ゲームのデータをEnumでどこまで管理すべきか
回答3
クリップ0
更新
2023/03/16
同じタグがついた質問を見る
C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。