8

通常、配列を初期化するときは、おそらく次のようにします。

int arr[] = {1, 2, 3, 4, 5};

しかし、以下のように配列の長さを明示的に制限しても問題ありませんか? :

int arr[3] = {1, 2, 3, 4, 5};

コンパイラからのいくつかの警告にもかかわらず、実行可能ファイルには問題がないようです。

4

1 に答える 1

10

いいえ、大丈夫ではありません。C99、6.7.8.2 から:

制約

  1. イニシャライザは、初期化されるエンティティに含まれていないオブジェクトに値を提供しようとしません。

私の読みでは、これは、過剰な初期化子要素を提供することは制約違反であるため、未定義の動作を引き起こすことを意味します。

于 2013-09-21T05:37:31.707 に答える