簡體   English   中英

為什么在C中使用const長度初始化數組時,為什么我限制為任意小數組大小?

[英]Why am I limited to an arbitrary small ( array size when initializing an array with a const length in C?

注意:我已經在C中看到了,為什么不能將const變量用作數組大小的初始化程序? 已經,但這還不能完全回答我的問題(或者我沒有完全理解它)。

這有效:

int main() {
    const long COUNT = 1048106;
    int nums[COUNT];
    return 0;
}

這崩潰:

int main() {
    const long COUNT = 1048106000;
    int nums[COUNT];
    return 0;
}

我已經讀過,這實際上是對const的不當使用(因為這意味着只讀,在編譯時不進行評估)。

因此,我很樂意使用#define或諸如此類的東西,但是仍然令我感到困擾的是為什么它在一定長度下有效,但沒有更高的效力。

您的兩個數組聲明實際上都是可變長度數組聲明。 盡管是const ,但COUNT在C中不是常量表達式。

但是無論如何,更大的大小只會超出實現的限制,從而使通常分配了這些本地資源的調用堆棧溢出。 盡管我懷疑這種行為在您進行優化時會消失。 編譯器可以輕松推斷出代碼段中未使用nums ,並將其完全刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM