構造体指定初期化

1399 ワード

標準C 89では、初期化された配列または構造体の要素の順序と同様に、初期化文の要素が一定の順序で現れる必要がある.
ISO C 99では、対応する配列の下付きまたは構造体のメンバー名を示す任意の順序でこれらの要素を与えることができます.
gccはANSI Cのstruct構造体の初期化形式を採用している.
 1 
struct
 s
 2 
{
 3 
    
int
 a;
 4 
    
int
 b;
 5 
};
 6 
 7 
struct
 s i 
=
 8 
{
 9 
     .a 
=
 
3
,
10 
     .b 
=
 
4
,
11 
};
12 
配列初期化も同様です.

int
 arr[
3

=
 {[
2

=
 
3
, [
0

=
 
2
,};
これらはなぜこのような形式で初期化されるのかよく理解され、形式上i.a=3である.arr[2] = 3; 初期化は名前を省くだけで、後ろの部分はカッコ内に入れました.「[index]」または「.fieldname」がインジケータである.古いバージョン:非標準の初期化形式
 1 
struct
 s
 2 
{
 3 
    
int
 a;
 4 
    
int
 b;
 5 
};
 6 
 7 
struct
 s i 
=
 8 
{
 9 
a : 
3
,
10  
b : 
4
,
11 
};
12 
参照先:http://www.kerneltravel.net/newbie/gcc_man.html#5.22この文章には「.fieldname:」という初期化形式があると言っていますが、間違っているようです.fieldnameの前にはありません.http://blog.hjenglish.com/bedford/articles/1078996.html
http://linuxprograms.wordpress.com/2008/03/07/c-structure-initialization-advanced/