在typedef-ed结构上使用sizeof运算符

时间:2012-10-16 22:55:37

标签: c++ typedef

这可能是太明显了。但是,我找不到具体的答案,尽管许多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

我想我错过了一些非常明显和直截了当的事情。但似乎无法确定它: - /

谢谢!

3 个答案:

答案 0 :(得分:11)

sizeof运算符有两种形式:

sizeof expression
sizeof(type)

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

答案 1 :(得分:10)

5.3.3 Sizeof [expr.sizeof]

  

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

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

sizeof tmp应为sizeof (tmp)

if (c <= sizeof tmp)应为if (c <= sizeof (tmp))

是的,非常“显而易见”。

答案 2 :(得分:3)

tmp周围添加括号:sizeof(tmp)