4

cでユニオンがnullかどうかを確認できますか? 例えば:

union{ char * name, struct Something * something ... }someUnion;

要素の万力チェックを行わずに、要素が初期化されていないかどうかを確認する方法はありますか?

ありがとう。

4

2 に答える 2

6

いいえ、その目的のために特定のフラグを追加することなくではありません。例えば:

struct someStruct {
    int initialized;
    union {
        char *name;
        struct Something *something;
    };
};

initializedユニオンに含まれるデータの種類を示す代わりに、フラグを格納することもできます。これは、通常、タグ付きユニオンと呼ばれます。

于 2012-05-10T22:15:49.077 に答える
1

はい、共用体のすべてのメンバーがポインター型または整数型であり、初期化で NULL ではない値が割り当てられているという条件の下では、 NULL の1 つの要素をチェックするだけで十分です。

union { 
    char * name;
    struct Something * something; } someUnion;

if (someUnion.name != 0) {
    // here you know that someUnion.something is not NULL too.
    // You don't know if it has been initialized as char*
    // or as struct something* though. Presumeably since
    // it is a unionboth interpretations make some sense. 
}
于 2012-05-10T22:35:55.293 に答える