我注意到在开源项目中经常使用结构末尾的空数组:
typedef struct A
{
......
void *arr[];
} A;
我想知道这是C标准吗?或者只适合 gcc 编译器?
从 C99 开始,它现已成为 C 标准。 C99 之前的编译器可能不支持它。旧的方法是声明一个 1 元素数组,并调整其分配大小。
New way:
typedef struct A
{
......
void *arr[];
} A;
int slots = 3;
A* myA = malloc(sizeof(A) + slots*sizeof(void*));
myA->arr[2] = foo;
Old way:
typedef struct A
{
......
void *arr[1];
} A;
int slots = 3;
A* myA = malloc(sizeof(A) + (slots-1)*sizeof(void*));
myA->arr[2] = foo;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)