gpt4 book ai didi

c - C 中可变大小数组的陷阱

转载 作者:行者123 更新时间:2023-11-30 21:16:18 25 4
gpt4 key购买 nike

以下代码片段使用标准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();
}

考虑到 VLA 是在 C99 中引入的,同时标准禁止了函数的默认返回类型 int

关于c - C 中可变大小数组的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com