2016-04-24 4 views
2

私の目的は、bがNULLに初期化されていることを確認することです。stuctureメンバーをNULLに自動初期化する

標準ISO/IEC 9899:201X節6.7.9-> 10の状態

静的またはスレッド記憶域期間を持つオブジェクトは、明示的に初期化 されていない場合: - それはを持っている場合ポインタタイプでは、NULLポインタに初期化された です。プログラムの下

#include<stdio.h> 

struct A 
{ 
    char* b; 
}; 

int main(void) 
{ 
    static struct A obj; 

    if (obj.b==NULL) 
     printf(" obj.b auto Initialized\n"); 

    return 0; 
} 

は私に出力を与えました。

obj.b auto Initialized 

これは、6.7.9-> 10節が構造オブジェクトのすべてのメンバーに適用できることを意味しますか?

注:引用で重点鉱山が

答えて

3

あるはい、そうです、また、集計のタイプに関する条項を注意してください。

それが集合体である場合、すべてのメンバは、(再帰的に)初期化されますこれらの規則に従って、 とパディングはゼロビットに初期化されます。

これは、メンバーが別の構造体であれば、そのメンバーが同じルールで初期化される場合、すべてのメンバーがその型のゼロ値に初期化されることを意味します。

+0

「その型のゼロ値に初期化されました」は高級でした。 +1 – sjsam

3

これは、6.7.9-> 10節が構造オブジェクトのすべてのメンバーに適用できることを意味しますか?

はい。サブオブジェクトは、それらがメンバーになっているオブジェクトと同じ記憶期間を持ちます。

+0

標準から引用できますか? – sjsam

+0

@sjsamおそらく* object *の定義を除いて、他に引用することはありません。あなたのコードでは、 'obj.b'はオブジェクトです。 –

+0

ありがとうございます!私はそれが本当に質問ではないことを私は確認:P – sjsam

関連する問題