1

Struct1とStruct2という2つの異なる構造があるとします。それらは両方ともそれらの中に異なる要素を持っています。このように比較するとどうなりますか?

if((Struct1) && (Struct2))
{
    doSomething();
}

このロジックを使用したコードを見つけたところ、何が起こっているのか疑問に思いました。ありがとう!

編集: Struct1とStruct2は両方とも、構造自体ではなく、2つの異なる構造へのポインターです。

4

4 に答える 4

5

で構造体を使用するifことはCにとって違法な構文であり、準拠するコンパイラでは受け入れられません。別の言い方をすれば、ブールコンテキストで構造を使用することはできません。

ほとんどの場合、コード内真のコードのStruct1場合)は構造体ではなく、(おそらく)ポインターまたはその他のものです。その場合、両方がNULL以外の場合、ifが使用されます。

于 2012-12-28T20:09:30.853 に答える
4

ここには2つの可能性があります。

これにより、st1とst2の両方がNULLを指していないかどうかがチェックされます。

struct Struct1 *st1 = ...;
struct Struct2 *st2 = ...;

if (st1 && st2) {
    ...
}

これは無効なコードです:

struct Struct1 st1 = ...;
struct Struct2 st2 = ...;

if (st1 && st2) {
    ...
}

これも無効なコードであることに注意してください。

struct Struct1 st1 = ...;

if (st1) {
    ...
}
于 2012-12-28T20:11:38.840 に答える
3

それが機能するためには、構造ではなくポインタが必要です。つまり、コードは次のようになります。

void somefunc(struct structA *Struct1, struct structB *Struct2)
{
    if (Struct1 && Struct2)
    {
        doSomething(Struct1, Struct2);
    }
}

これは、ポインタを使用する前に、どちらのポインタもNULLでないことを確認します。構造を直接比較することはできないため、コードが次の場合:

void somefunc(struct structA Struct1, struct structB Struct2)
{
    if (Struct1 && Struct2)
    {
        doSomething(Struct1, Struct2);
    }
}

セマンティックエラーが発生します。構造全体を何かと比較することはできません。

変数の大文字化は従来型です。

于 2012-12-28T20:11:49.807 に答える
0

すべてのサブフィールドが同一の場合は「true」または1を返し、それ以外の場合は「false」または0を返します。

これらの条件演算子の基本的な概念です。

&&演算子の詳細については、こちらをご覧ください

ありがとう。

于 2012-12-28T20:22:23.673 に答える