Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
通常、配列を初期化するときは、おそらく次のようにします。
int arr[] = {1, 2, 3, 4, 5};
しかし、以下のように配列の長さを明示的に制限しても問題ありませんか? :
int arr[3] = {1, 2, 3, 4, 5};
コンパイラからのいくつかの警告にもかかわらず、実行可能ファイルには問題がないようです。
いいえ、大丈夫ではありません。C99、6.7.8.2 から:
制約 イニシャライザは、初期化されるエンティティに含まれていないオブジェクトに値を提供しようとしません。
制約
私の読みでは、これは、過剰な初期化子要素を提供することは制約違反であるため、未定義の動作を引き起こすことを意味します。