可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
This might be something too obvious. However, I couldn't find the specific answer though many stackoverflow threads talk about different aspects of this.
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; }
I compile this prog as -
g++ -lstdc++ a.cpp
I get an error -
expected primary-expression before ‘)’ token
I think I am missing something very obvious and straightforward. But can't seem to pinpoint it :-/
Thanks!
回答1:
5.3.3 Sizeof [expr.sizeof]
1) The sizeof
operator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id. (emphasis mine)
In your case, it is a type-id so it must be parenthesized. What a type-id is is described in 8.1 Type names [dcl.name].
sizeof tmp
should be sizeof (tmp)
.
As in
if (c <= sizeof tmp)
should be if (c <= sizeof (tmp))
.
Yup, pretty "obvious and straightforward".
回答2:
The sizeof operator have two forms:
sizeof expression sizeof(type)
As you're giving it a type, you need the parenthesis, sizeof(tmp)
回答3:
add parentheses around tmp
: sizeof(tmp)