gpt4 book ai didi

c - 为什么 sizeof(x)++ 编译?

转载 作者:行者123 更新时间:2023-12-02 09:44:14 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does sizeof(x++) not increment x?

(10 个回答)


去年关闭。




我遇到了以下代码片段:

int a = 3;
printf("%d", sizeof(a)++);

显然,这将使用 GCC 9.3.0 和 -std=c99 进行编译。
虽然这不编译:
printf("%d", sizeof(3)++);

GCC 打印错误

error: lvalue required as increment operand



在我编译第一个片段之前,我会预料到会出现这样的错误。

后缀++ 运算符的操作数应为 C99 标准的左值

The operand of the postfix increment or decrement operator shall have qualified or unqualified real or pointer type and shall be a modifiable lvalue.



关于 sizeof Operator 的返回值(如预期):

The sizeof operator yields the size (in bytes) of its operand, which may be an expression or the parenthesized name of a type. The size is determined from the type of the operand. The result is an integer. If the type of the operand is a variable length array type, the operand is evaluated; otherwise, the operand is not evaluated and the result is an integer constant.

The value of the result is implementation-defined, and its type (an unsigned integer type) is size_t, defined in (and other headers).


sizeof(a)++怎么可能编译?这是未定义的行为还是我错过了什么?

最佳答案

sizeof是一个运算符,而不是一个函数,并且与任何运算符一样,它具有优先级,在 C 中低于 ++运算符(operator)。因此构造 sizeof(a)++相当于 sizeof a++这又相当于 sizeof (a++) .这里我们在 a 上有后增量这是一个左值,所以它是完全合法的。如果不是 a您有 3这不是左值,编译将失败。

关于c - 为什么 sizeof(x)++ 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663807/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com