通常,當我們初始化數組,我們可能會做:在數組初始值設定項中有多餘的元素可以嗎?
int arr[] = {1, 2, 3, 4, 5};
但它是確定明確的限制,如下數組的長度? :
int arr[3] = {1, 2, 3, 4, 5};
儘管編譯器有一些警告,但可執行文件似乎沒有任何問題。
通常,當我們初始化數組,我們可能會做:在數組初始值設定項中有多餘的元素可以嗎?
int arr[] = {1, 2, 3, 4, 5};
但它是確定明確的限制,如下數組的長度? :
int arr[3] = {1, 2, 3, 4, 5};
儘管編譯器有一些警告,但可執行文件似乎沒有任何問題。
不,它不好。從C99,6.7.8.2:
約束
- 沒有初始化應嘗試提供不包含在實體被初始化的對象的值。
在我讀,這意味着提供多餘的初始元素是違反約束,所以它調用未定義的行爲。
爲了澄清你的意思,在上面的例子中arr [5]和以上是定義的行爲,但arr [4]和以下是不確定的? – Pacerier
@Prier如果我正確理解標準,那麼確實如此。 – 2013-09-21 05:45:28
但爲什麼即使這樣做 – aaronman
注意警告通常是一個好主意。但編譯器非常有禮貌,可以忽略額外元素上的亂碼。不過我覺得這是拙劣的編程。 –
做什麼的動機是?我沒有看到它的實際用途,它爲什麼重要? –