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. 长度阵列阵列
- 3. LINQ ToArray的()改变阵列长度
- 4. 是否有静态类型和可变长度的Java数组/列表
- 5. 静态2D阵列
- 6. 设置一个可变长度的二维阵列
- 7. 传递一个可变长度的阵列,通过AJAX到PHP
- 8. 在Rust中不工作的静态可变阵列
- 9. 宣布阵列的长度
- 10. C99可变长度自动阵列性能
- 11. 可变数组成员(零长度阵列)
- 12. 可变长度的空闲列表
- 13. SQL中的可变长度int列
- 14. 连续,固定长度的可变长度序列批次
- 15. 可变蜱长度
- 16. Tensorflow可变长度
- 17. 发布静态和可变长度的数据与jQuery和ColdFusion的
- 18. CUDA推力阵列长度
- 19. 阵列长度问题
- 20. 查找阵列长度incakephp
- 21. 固定长度BitArrays阵列
- 22. 阵列最大长度
- 23. 静态的typedef的std ::列表阵列
- 24. 静态对象阵列
- 25. 阵列与静态方法
- 26. Codeigniter可变长度参数列表
- 27. 可变长度模板参数列表?
- 28. 含有重新排列可变长度
- 29. 可变长度的String.Format
- 30. 可变长度的NVARCHAR?
该数组的长度不是可变的。 '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