Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
606 views
in Technique[技术] by (71.8m points)

gcc - C Struct array member without specific length

I have encountered this piece of code:

struct test                   
{                                        
 uint32       num_fields;            
 char array_field [];               
}; 

How can I understand array_field? Is this a gcc extension for the C language?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It's a C99 feature, called flexible array member which is typically used to create a variable length array.

It can only be specified as the last member of a struct without specifying the size (as in array_field [];).


For example, you can do the following and the member arr will have 5 bytes allocated for it:

struct flexi_example
{
int data;
char arr[];
};


struct flexi_example *obj;

obj = malloc(sizeof (struct flexi_example) + 5);

Its pros/cons discussed here:

Flexible array members in C - bad?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...