c-faq和我的编译器之间的矛盾

fud*_*din 0 c operator-precedence

在C-FAQ说的代码:

int i = 7;
printf("%d\n", i++ * i++);
Run Code Online (Sandbox Code Playgroud)

打印49.无论评价顺序如何,都不应该打印56?当我在Turbo C 3.0编译器上运行此代码时,它给出了56的输出.为什么会出现矛盾?

Jim*_*som 10

没有矛盾.问题是从用户角度出发,如果你仔细阅读答案,你会发现这句话

包含多个模糊副作用的代码行为一直未定义.

所以它可能会打印49或56.毕竟未定义的行为是未定义的.这就是没有真正矛盾的原因.您可能希望了解所谓的序列点.

  • @fahad:如果考试中出现这样的事情,那么你就会被那些对C语言知之甚少的人教授.试着通过考试,无视你的教师所说的听起来不对的任何事情(很可能是错误的),并从信誉良好的来源,如好书或Stack Overflow高评价答案中获取您的知识. (2认同)