定义不确定大小的数组

define array with unsure size

本文关键字:数组 不确定 定义      更新时间:2023-10-16

据我了解,当我们定义像 const char argv[SIZE];这样的数组时,必须是编译时已知的数字。

但是最近我阅读了AOSP代码,并找到了以下内容:http://androidxref.com/5.1.1.r6/xref/system/netd/netd/server/netdconstants.cpp#70

static int execIptables(IptablesTarget target, bool silent, va_list args) {
    /* Read arguments from incoming va_list; we expect the list to be NULL terminated. */
    std::list<const char*> argsList;
    argsList.push_back(NULL);
    const char* arg;
    do {
        arg = va_arg(args, const char *);
        argsList.push_back(arg);
    } while (arg);
    int i = 0;
    const char* argv[argsList.size()];
    ...

看来const char* argv[argsList.size()];使用的大小仅在运行时已知。这是因为此数组是在将在堆栈中分配数组的函数中定义的,或者是因为编译器可以找出编译时大小的大小?

正确的术语是可变长度阵列(vla)。

C 语言标准不支持此功能。

C语言标准在某个时候开始支持它。

内存中的分配是编译器依赖性的(即,不是由标准决定)。