gcc: 可伸缩(柔性)数组成员(flexible array member)FAM

151 篇文章 ¥59.90 ¥99.00
本文介绍了C语言中可伸缩数组成员(FAM)的概念,它允许在结构体中定义一个不指定大小的数组以节省内存。FAM必须放置在结构体的最后,从C99标准开始支持。虽然在某些旧版GCC中可能产生警告,但C89标准下仍可以编译通过。文中还提及了Linux内核中使用FAM的情况,以及由于GCC版本过旧导致的升级需求。

介绍

https://blog.csdn.net/sunlylorn/article/details/7544301

目的是为了在节省内存的情况下,用精简的代码访问到可变内存地址。其实代码理解起来也更方便。

相关的错误

伸缩数组成员必须放到最后

[root@10 test]# g++ -std=c++11 struct.c
struct.c:6:8: error: flexible array member ‘abc::a’ not at end of ‘struct abc’
char a[];
^

c99开始支持

在最新的gcc版本,这个限制看着已经去掉了。
c89编译也是没有问题;

[root@10 test]# gcc -std=c89 -Wpedantic struct.c
struct.c:8:6: warning: ISO C90 does not support flexible array members [-Wpedantic]
char a[];
这里也只是在pedantic的情况下出现一个警告,不会有编译错误。大家都还是喜欢这种定义。

举例

kernel

https://lore.kernel.org/lkml/20180814170904.GA1276

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzhan017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值