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

5.3.3 大小[expr.sizeof]

1)sizeof运算符产生其操作数的对象表示中的字节数。操作数要么是一个表达式,它是一个未计算的操作数(第 5 条),要么是一个带括号的type-id(强调我的)

在您的情况下,它是一个类型 ID,因此必须用括号括起来。8.1 类型名称 [dcl.name]中描述了什么是类型 ID 。

sizeof tmp应该是sizeof (tmp)

如在

if (c <= sizeof tmp)应该是if (c <= sizeof (tmp))

是的,非常“明显和直接”。

于 2012-10-16T22:56:58.740 回答
11

sizeof 运算符有两种形式:

sizeof expression
sizeof(type)

当你给它一个类型时,你需要括号,sizeof(tmp)

于 2012-10-16T22:58:36.163 回答
3

在周围添加括号tmpsizeof(tmp)

于 2012-10-16T22:57:26.983 回答