10

これはあまりにも明白なことかもしれません。ただし、多くのstackoverflowスレッドがこれのさまざまな側面について話しているにもかかわらず、特定の答えを見つけることができませんでした。

typedef struct _tmp {
   unsigned int a;
   unsigned int b;
} tmp;

int main()
{
    int c=10;
    if (c <= sizeof tmp) {
       printf("less\n");
    } else {
       printf("more\n");
    }
    return 0;
}

このプログラムを次のようにコンパイルします-

g++ -lstdc++ a.cpp

エラーが発生します -

expected primary-expression before ‘)’ token

非常に明白で簡単なものが欠けていると思います。しかし、それを特定することはできないようです:-/

ありがとう!

4

3 に答える 3

11

sizeof 演算子には次の 2 つの形式があります。

sizeof expression
sizeof(type)

タイプを指定しているので、括弧が必要です。sizeof(tmp)

于 2012-10-16T22:58:36.163 に答える
11

5.3.3 sizeof [expr.sizeof]

1)sizeof演算子は、そのオペランドのオブジェクト表現のバイト数を返します。オペランドは、未評価のオペランド (第 5 節) である式、または括弧で囲まれたtype-idのいずれかです。(私のものを強調)

あなたの場合、それはtype-idであるため、括弧で囲む必要があります。type-id とは8.1 Type names [dcl.name]で説明されています。

sizeof tmpする必要がありますsizeof (tmp)

のように

if (c <= sizeof tmp)する必要がありますif (c <= sizeof (tmp))

うん、かなり「明白で簡単」です。

于 2012-10-16T22:56:58.740 に答える
3

を括弧で囲みますtmp:sizeof(tmp)

于 2012-10-16T22:57:26.983 に答える