0
A
回答
3
請注意,在C語言中const
對象不符合常量。它們不能用於構建常量表達式。在您的代碼示例中,n
不是C語言術語中的常量。表達n
不是C.
(參見"static const" vs "#define" vs "enum"和Why doesn't this C program compile? What is wrong with this?對於更多的細節。)在整數表達式
這立即意味着你的array
聲明是聲明一個可變長度數組的一種嘗試。變長數組只允許作爲自動(本地)對象。一旦用靜態存儲持續時間聲明數組,大小必須是一個整型常量表達式,即編譯時常量。您的n
不符合此類要求。該聲明不合法。
這就是爲什麼在C語言中我們主要使用#define
和/或enum
來引入命名常量,而不是const
對象。
0
靜態變量必須在COMPILE時間內分配,因此它們的大小和初始化值必須在編譯時已知。有人可能會爭辯說,使用編譯時優化n var可能會被常量值10替換,因此可能可以成功編譯該特定情況。
2
const int n=10;
static int array[n];
此代碼會遇到一個錯誤:
storage size of ‘array’ isn’t constant static int array[n]; ^
靜態存儲器分配是指執行相關的程序之前在編譯時保留存儲器的過程中,不象動態存儲器分配的或自動的存儲器分配在運行時根據需要分配內存。
const
in C donot make the variable available in compile-time。
這樣的聲明不會產生錯誤:
static int array[10];
所以,你已經寫好的聲明是非法的,或者遇到錯誤,而在程序編譯。
相關問題
- 1. 具有可變內部陣列長度的2D陣列JAVA
- 2. 使用Singleton的動態長度陣列
- 3. 長度陣列陣列
- 4. LINQ ToArray的()改變陣列長度
- 5. 是否有靜態類型和可變長度的Java數組/列表
- 6. 編輯另一個可變長度列表中的可變長度列表
- 7. 靜態2D陣列
- 8. RavenDB嵌套,可變長度陣列上的Map/Reduce/Transform
- 9. 設置一個可變長度的二維陣列
- 10. Box2d - 非POD元素類型爲'b2Vec2'的可變長度陣列
- 11. 傳遞一個可變長度的陣列,通過AJAX到PHP
- 12. 在Rust中不工作的靜態可變陣列
- 13. 2D陣列的長度[i]
- 14. 使用長度()的陣列
- 15. 宣佈陣列的長度
- 16. 查找陣列的長度
- 17. 陣列的靜態向量
- 18. GCC允許陣列與可變長度被初始化
- 19. C99可變長度自動陣列性能
- 20. 可變數組成員(零長度陣列)
- 21. 可變長度陣列(VLA)在C和C++
- 22. 可變長度數組摺疊以恆定陣列
- 23. 可變長度的空閒列表
- 24. SQL中的可變長度int列
- 25. 連續,固定長度的可變長度序列批次
- 26. 可變蜱長度
- 27. Tensorflow可變長度
- 28. 發佈靜態和可變長度的數據與jQuery和ColdFusion的
- 29. 獲取k-1的長度ķ陣列的長度子集陣列
- 30. 一維陣列形狀(長度,)與(長度,1)與(長度)
該數組的長度不是可變的。 'n'是常量表達式,其值在編譯時已知。 – 2014-10-11 05:35:24
使用static或extern存儲類speci fi er聲明的數組對象不能有可變長度數組(VLA)類型。看到問題爲什麼不能使靜態數組的大小變化? [複製] – 2014-10-11 05:36:30
@R Sahu:這是不正確的。在C語言中'const'對象不符合編譯時常量。這是C和C++語言之間的一個重要區別。 – AnT 2014-10-11 06:13:59