我们如何在编译时动态分配?是否constexpr operator new只是在栈上分配内存?
这个问题与“ Are conformant arrayparameters VLAs? ”非常相似,唯一的区别是这里我在数组声明的andstatic中使用关键字(C99 中引入),这意味着声明的数组应该有空间至少对于元素。这是一个例子:[]len
#include <stddef.h>\n#include <stdio.h>\n\nvoid print_array(size_t len, const int arr[static len]) {\n for (size_t i = 0; i < len; i++) {\n printf("%d\\n", arr[i]);\n }\n}\n\nint main(void) {\n const int arr[] = {1, 2, 3, 4};\n print_array(sizeof arr / sizeof *arr, arr);\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n当在 GCC 和 Clang 上使用该-Wvla标志编译此代码时,会发出以下警告:
main.c:4:1: warning: ISO C90 forbids variable length array \xe2\x80\x98arr\xe2\x80\x99 [-Wvla]\n 4 | void print_array(size_t len, const int …Run Code Online (Sandbox Code Playgroud)