exs*_*ake 2 c arrays dimension variable-length-array
这两种形式的数组声明是否正确?
第一:
int n;
n=3;
int A[n];
Run Code Online (Sandbox Code Playgroud)
第二:
#define N 300;
.
.
.
.
int a[N];
Run Code Online (Sandbox Code Playgroud)
对我来说,这两种方式完全有效,但有人告诉我,第一种方式是错误的.
第一个就是说:
int A[10];
Run Code Online (Sandbox Code Playgroud)
所以,对我来说,说第一个无效是没有多大意义的.
但要完全确定,我想在这里问一下.它只是关于编程风格还是第一个不是正确的方式?
谢谢.
您的第一个示例使用称为可变长度数组(VLA)的C99功能,这在草案C99标准部分6.7.5.2 数组声明符第4段中有所介绍:
[...]如果size是一个整型常量表达式,并且元素类型具有已知的常量大小,则数组类型不是可变长度数组类型; 否则,数组类型是可变长度数组类型.
这两种形式都不一定是坏的,但如果可以通过用户输入控制它们的大小,则可变长度数组可能是危险的.主要的问题是并非所有的编译器都支持C99,最好的例子是Visual Studio,尽管最近开始支持C99的部分,据我所知仍然不支持VLA.如果你想在C++中使用你的代码也是一个问题,因为C++标准根本不支持VLA,尽管gcc和clang支持VLA作为C++的扩展.请注意,VLA是针对C++ 14提出的,但被拒绝了.
另一个问题是C11使VLA成为可选功能,这在C11草案标准部分6.10.8.3 条件特征宏中有所涉及:
Run Code Online (Sandbox Code Playgroud)_ _STDC_NO_VLA_ _ The integer constant 1, intended to indicate that the implementation does not support variable length arrays or variably modified types.