本文介绍了出把这个计划.Confused的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我坚持了这个问题。

INT I = 5,;
A = ++ I + I + + + +我+ I ++ - --i;
的printf(%d个,一);

据我'一个'应该是20。
一个= 6 + 6 + 8-8
然而,在执行我找到了答案是18,我做错了什么?一步一步的解释将是有益的。


解决方案

我在我的博客文章写这一个详细的方式在:的

我张贴一些摘录在这里。

问题的一个特殊类型在C编程论坛时间后问时间。有关于刺激在论坛上有经验的程序员这样的问题两件事情。首先,这种类型的问题是如此普遍,许多甚至不希望他们做出回应,即使这意味着发布一个链接到一个类似的问题已经回答了另一个线程。第二,更重要的是,即使有人试图提供正确答案的问题,还有很多其他人谁忽视它填补螺纹不正确的答案。

该问题通常涉及寻找code的输出是这样的。

 的#include<&stdio.h中GT;诠释的main()
{
    INT I = 5;
    的printf(%d个%D \\ n,我,我 - ,+ +我);
    返回0;
}

输出为5 6 5时,使用GCC编译和6 6 6时,与Microsoft C / C ++编译器来使用Microsoft Visual Studio编译。

这样的C程序的行为是不确定的。在声明的printf(%d个%D \\ n,我,我 - ,+ +我);和+ = A + + + +一个分号;,是唯一的序列点。 Ç保证一个给定的前pression的所有的副作用是通过在节目的下一个序列点完成。如果下一个序列点之前与相互影响的副作用两个或两个以上的操作发生的行为是不确定的。当不同的编译器编译此类code行为可能不同。

在我引用来自ISO / IEC标准的有关章节,让我从K&放东西报价; R。在第2.12节的书(precedence和计算顺序),作者写道,

They provide one more example in this section.

If you want to read more on this, download the ISO/IEC 9899 C standard and turn to page 438 for Annex C – Sequence Points. It lists down all the sequence points. ; is one of them. + and ++ operators are not sequence points.

Next, read section 5.1.2.3 (Program execution), point 2.

这篇关于出把这个计划.Confused的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 10:11