【发布时间】:2024-01-13 17:54:01
【问题描述】:
我不知道这是否是特定于编译器的,但是当我尝试在 DevC++
中运行这两个表达式时当i=c=b=0; i=i++ + ++c 给出2 而i=++i + c++ 给出1 时
但是
b=i++ + ++c 和
b=++i + ++c 为这两个表达式生成结果 1。
我知道根据 C 标准规范,在同一个表达式中将变量增加两次会导致未定义的值,但我很好奇编译器是如何产生这些输出的。有人可以解释一下如何以及为什么?
【问题讨论】:
-
未定义的行为。 Demons may fly out of your nose。实际上,如果您没有将结果分配回
i,这个问题会很有趣,这会导致未定义的行为。 -
@Fred Larson 在第二个例子中他不是有效的,但第一个是你提到的未定义
-
@Jesus:我看到两者都分配给
i,所以两者都是未定义的行为。赋值和增量之间没有序列点。 -
他说 b=i++ + ++c 的地方有一个,这个和旁边的一样有效。
-
@grok12:不,可以在表达式中使用变量值后的任何时间执行后增量。未定义是在分配之前还是之后执行。