C言語のポインタ変数を含む構造体初期化について
掲題の質問です。まだ仕様を完全に理解したわけではないので違う場合はお手数ですが指摘願います。
構造体を初期化するときの仕様として、
struct S v={0};
はメンバ全部初期化されることが保証されてます。
また、NULL
は0以外でもよくて100でもいい。
ただし他の関数や変数とぶつかってはならない。
ただし、数値型に変換するときは0でなければならない。
そのとき、初期化した構造体に含まれるポインタ変数の値とNULL
を比較したときにどのようなコンパイラでコンパイルしたとしても、一致しますか?
また、他のメンバ変数はその場合、ゼロクリアされていることが保証されますか?
struct S {
int val;
void *ptr;
int val2;
}
int main(int argc,char *argv[]){
struct S v={0};
printf("%d\n%d\n",v.val,v.val2);
if( v.ptr == NULL) {
// NULLのときの処理
}
}
よろしくお願いします。