以下代码段使用标准gcc
正确编译。这里有什么可能的陷阱? - 特别适用于内核级开发。
int n;
f(){n=2;}
g(){int b[n];}
main(){
int a[n];
f();
g();
}
它是无效代码,因为可变长度数组的大小可能不等于0.在您的示例中,文件范围变量n
初始化为0。
这个数组
int a[n];
由于变量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();
}
考虑到在C99中引入了VLA,同时标准抑制了函数的默认返回类型int
。