C:创建一个变量依赖于运行时函数的静态数组?

C: Creating a static array with variable dependent on runtime functions?

由于静态数组是在编译时创建的,我可以使用通过例如获取的变量来设置数组的长度吗?另一个功能?我相信这取决于编译器是否足够聪明,知道这个变量会有什么值?

我通过 snprinf() 获取尺寸的示例代码。使用带有 -Wall 标志的 gcc 编译此代码,没有错误或警告。

#include <stdio.h>
    
int main(void)
{
    int mac[6] = {0xAA,0xBB,0xCC,0xDD,0xEE,0xFF};
    int size = snprintf(NULL, 0, "%02X", mac[0]);
    char str[size + 1];

    snprintf(str, size + 1, "%02X", mac[0]);

    printf("%s\n", str);

    return 0;
}

编译和 运行 结果:

AA

为什么这可能?

str 不是静态数组,它是 C 语言中的 VLA,可变长度数组。