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

Using sizeof operator on a typedef-ed struct

本文关键字:sizeof 运算符 typedef-ed 结构上      更新时间:2023-10-16

这可能太明显了。但是,我找不到具体的答案,尽管许多堆栈溢出线程都在谈论这方面的不同方面。

typedef struct _tmp {
   unsigned int a;
   unsigned int b;
} tmp;
int main()
{
    int c=10;
    if (c <= sizeof tmp) {
       printf("lessn");
    } else {
       printf("moren");
    }
    return 0;
}

我把这个程序编译为——

g++ -lstdc++ a.cpp

我收到一个错误 -

expected primary-expression before ‘)’ token

我想我错过了一些非常明显和直接的东西。但似乎无法确定它:-/

谢谢!

5.3.3 大小 [expr.sizeof]

1) sizeof运算符在其操作数的对象表示中产生字节数。操作数是 表达式(未计算的操作数)(条款 5)或带括号的类型 ID (强调我的)

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

sizeof tmp应该是sizeof (tmp).

如在

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

是的,非常"明显和直接"。

sizeof 运算符有两种形式:

sizeof expression
sizeof(type)

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

tmp两边添加括号:sizeof(tmp)