- 主题:零长数组太爽了,用得上头,这个好不好?
0数组在变长结构中几乎是必须的,不过推荐是C99的标准写法char someFields[]; 而不是非标准的写法char someFields[0]; 或者 char someFields[1];
linux kernel 5.8有过一次相关的更改:
https://www.phoronix.com/news/Linux-5.8-Flexible-Array-Member
https://herbsutter.com/2009/09/02/when-is-a-zero-length-array-okay/
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
我试了一下,VS2019还是会对C99的写法char someFields[]给出编译警告,只要是在.cpp里出现,而不是在.c里。因为这是C的标准,不是cpp的标准。
要想所有C++ compiler不给编译警告,估计只能用char someFields[1]这种写法了
【 在 cjon 的大作中提到: 】
: 嗯,用过变长数组,零长的还是第一次听说。
--
FROM 125.35.123.*
解析紧凑结构中的字段用的
vector<>这种搞不了紧凑结构,因为它的数据在另外的地方(heap里)。
当然,可以用protobuf搞这些,只要资源允许。
【 在 rexxie 的大作中提到: 】
: 用vector<> 不行么?
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*
如果一定要用#pragma warning(disable)之外的方式去除警告,集中放在.c里用someFields[]好了,反正linux kernel里也大量使用
【 在 allegro 的大作中提到: 】
: opening a can of worms..
:
--
FROM 125.35.123.*