ali*_*nia -4 c arrays gcc variable-length-array
以下代码段使用标准正确编译gcc。这里可能存在哪些陷阱?--特别是对于内核级开发。
int n;
f(){n=2;}
g(){int b[n];}
main(){
int a[n];
f();
g();
}
Run Code Online (Sandbox Code Playgroud)
这是无效代码,因为可变长度数组的大小可能不等于 0。在您的示例中,文件范围变量n由 0 初始化。
这个数组
int a[n];
Run Code Online (Sandbox Code Playgroud)
大小为零,因为变量n被零初始化为具有静态存储持续时间。
要获得有效的程序,您应该编写如下内容
#include <stdio.h>
int n;
void f( void ){n=2;}
void g( void ){int b[n]; printf( "sizeof( b ) = %zu\n", sizeof( b ) ); }
int main( void )
{
f();
int a[n];
printf( "sizeof( a ) = %zu\n", sizeof( a ) );
g();
}
Run Code Online (Sandbox Code Playgroud)
考虑到 VLA(s) 是在 C99 中引入的,同时标准禁止了int函数的默认返回类型。