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

ssk*_*itk 9 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;
}
Run Code Online (Sandbox Code Playgroud)

我编译这个编程为 -

g++ -lstdc++ a.cpp
Run Code Online (Sandbox Code Playgroud)

我收到一个错误 -

expected primary-expression before ‘)’ token
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Luc*_*ore 11

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)).

是的,非常"明显而直截了当".


nos*_*nos 11

sizeof运算符有两种形式:

sizeof expression
sizeof(type)
Run Code Online (Sandbox Code Playgroud)

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