这个问题与"Are conformant array parameters VLAs?"非常相似,唯一的区别是我在数组声明的[
和]
中使用了static
关键字(在C99中引入),这意味着声明的数组应该至少有len
个元素的空间.下面是一个例子:
#include <stddef.h>
#include <stdio.h>
void print_array(size_t len, const int arr[static len]) {
for (size_t i = 0; i < len; i++) {
printf("%d\n", arr[i]);
}
}
int main(void) {
const int arr[] = {1, 2, 3, 4};
print_array(sizeof arr / sizeof *arr, arr);
return 0;
}
当在GCC和Clang上使用-Wvla
标志编译此代码时,会给出以下警告:
main.c:4:1: warning: ISO C90 forbids variable length array ‘arr’ [-Wvla]
4 | void print_array(size_t len, const int arr[static len]) {
| ^~~~
即使在指定static
的情况下,arr
作为VLA的意义是什么?这难道不会让static
对这样的案件毫无用处吗?
我试着在C标准中寻找答案,但我找不到.
谢谢!