这可能是太明显了。但是,我找不到具体的答案,尽管许多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
我想我错过了一些非常明显和直截了当的事情。但似乎无法确定它: - /
谢谢!
答案 0 :(得分:11)
sizeof运算符有两种形式:
sizeof expression
sizeof(type)
当你给它一个类型时,你需要括号sizeof(tmp)
答案 1 :(得分:10)
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)