2013-09-21 35 views
5

通常,當我們初始化數組,我們可能會做:在數組初始值設定項中有多餘的元素可以嗎?

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

但它是確定明確的限制,如下數組的長度? :

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

儘管編譯器有一些警告,但可執行文件似乎沒有任何問題。

+3

但爲什麼即使這樣做 – aaronman

+1

注意警告通常是一個好主意。但編譯器非常有禮貌,可以忽略額外元素上的亂碼。不過我覺得這是拙劣的編程。 –

+0

做什麼的動機是?我沒有看到它的實際用途,它爲什麼重要? –

回答

8

不,它不好。從C99,6.7.8.2:

約束

  1. 沒有初始化應嘗試提供不包含在實體被初始化的對象的值。

在我讀,這意味着提供多餘的初始元素是違反約束,所以它調用未定義的行爲。

+0

爲了澄清你的意思,在上面的例子中arr [5]和以上是定義的行爲,但arr [4]和以下是不確定的? – Pacerier

+1

@Prier如果我正確理解標準,那麼確實如此。 – 2013-09-21 05:45:28

相關問題