1. ホーム
  2. c++

[解決済み] array[100] = {0}で配列全体を0にする方法とは?

2022-05-15 05:53:31

質問

コンパイラはどのように char array[100] = {0}; ? その背後にある魔法は何ですか?

内部でコンパイラがどのように初期化しているのか知りたかったのです。

どのように解決するのですか?

魔法ではありません。

このコードのC言語での動作は、C言語仕様書の6.7.8.21節に記載されています( C仕様のオンラインドラフト ): 指定された値を持たない要素に対して、コンパイラはポインタをNULLに、算術型を0に初期化します (そしてこれを集約に再帰的に適用します)。

C++ におけるこのコードの動作は、C++ 仕様書のセクション 8.5.1.7 で説明されています ( C++ 仕様のオンライン ドラフト ): コンパイラは指定された値を持っていない要素を集約して初期化します。

また、C++(Cではない)では、空の初期化リストを使用することができ、コンパイラーは配列のすべての要素を集約して初期化することに注意してください。

char array[100] = {};

これを実行したときに、コンパイラがどのようなコードを生成するかについては、この質問を見てください。 配列0-初期化からの奇妙なアセンブリ