易截截图软件、单文件、免安装、纯绿色、仅160KB

关于C/C++ 表达式求值顺序 未定义

表达式的副作用
运算符的优先级与结合性规定了表达式中相邻两个运算符的运算次序,但对于双目
运算的操作数,C++没有规定他们的计算次序。例如,对于表达式:
exp1 + exp2;
先计算 exp1 还是 exp2?不同的编译器有不同的做法。
在数学上,对于双目运算符,不论先计算哪一个操作数,要求最终计算结果一样。
在 C++中,在计算一个操作数时,该计算会改变(影响)另一个操作数,从而导致因操
作数的不同计算次序产生不同的最终计算结果。对于因操作数计算的次序不同产生不同
结果的表达式为带副作用的表达式。在计算时会影响其他操作数的值,引起副作用的运
算符为带副作用的运算符。如++、– –以及各种赋值运算符为带副作用的运算符。例如:
x=1,(x+2)*(++x)
先计算 x+2 表达式的值为 6。
若先计算++x,由于修改了 x+2 中 x 的值,计算结果为8。
在 C++中规定,先计算逻辑与(&&)和逻辑或(||)的第一个操作数,再计算第二
个操作数,以便进行短路求值。条件(?:)、逗号(,)运算符也规定了操作数的计算次序,
除此以外,其他运算符没有规定操作数的计算次序,计算次序由具体的编译器决定。因
此在含这些运算符的表达式中,避免在操作数中引入带副作用的运算符。
表达式求值顺序不同于运算结合性和优先级。下面是一个经典例子,被 ISO C99/ C++98 /03 三大标准明确提到:他的结果是不确定(unspecified) 的。 
i = ++i + 1;   // The behavior is unspecified
    在介绍概念之前,我们先解释一下它的结果。这个表达式( expression )包含3个子表达式( subexpression ):
e1 =  ++i
e2 = e1  + 1
i = e2
    这三个子表达式都没有顺序点( sequence point ),而 ++ i  和 i = e3 都是有副作用( side effect )的表达式。由于没有顺序点,语言不保证这两个副作用的顺序。
   更加可怕的是,如果i 是一个内建类型,并在下一个顺序点之前被改写超过一次,那么结果是未定义(undefined)的!比如本例中如果有:
int i = 0x1000fffe;
i = ++i + 1;      // The result is undefined!!
   你也许会认为他的结果是加1 或者加2,其实更糟糕 —— 结果可能是 0x1001ffff 。他的高字节接受了一个副作用的内容,而低字节则接受了另一个副作用的内容! 如果i 是指针,那么将很容易造


相关文档:

linux内核配置文件.config,基于s3c2410实现

下面的文件的使用方法是:将下面的文件保存在linux内核源码目录中,文件的名称是.config,然后make menuconfig,在出现
的配置界面中选择Load Configuratio选项,然后可以在这个基础上修改自己的kernel。下面的配置是基于s3c2410,支持yaffs2
文件系统。我看了一下编译出来的uImage大概在800k左右,呵呵么这是本人第一次成 ......

python,c++,C#随机数生成

先说python
python的random模块提供了多个伪随机数发生器,默认都是用当前时间戳为随机数种子。
下面是该模块几个最常用的函数
random() Return the next random floating point number in the range [0.0, 1.0). 
randint(a,b) Return a random integer N such that a <=
N <= b
randrange([star ......

一个Linux下C线程池的实现

      什么时候需要创建线程池呢?简单的说,如果一个应用需要频繁的创建和销毁线程,而任务执行的时间又非常短,这样线程创建和销毁的带来的开销就不容忽视,这时也是线程池该出场的机会了。如果线程创建和销毁时间相比任务执行时间可以忽略不计,则没有必要使用线程池了。
   下面是 ......

标准C/C++程序通过gSOAP调用WebService

转自:http://commandos.blog.51cto.com/154976/130652
一、 环境准备
在本文中,所有程序均在Linux下开发完成,经测试能够正常运行。
在开发过程中,我们需要用到gSOAP,可以从以下网址下载获得:[url]http://www.cs.fsu.edu/~engelen/soap.html[/url]
我下载的是gsoap_2.7.12.tar.gz
下载下来解压缩,按正常安装过 ......

DS计划C深入项目学习总结——变量的作用域

1.1 变量作用域
1.1.1 几种常见类型变量的作用域
作用域(scope)或者可见性是指变量在程序内的可见和可引用的范围。
比如:
1、 全局变量在所有的文件都可见,那他的作用域就是所有文件;
2、 static定义的全局变量,只在定义它的源文件中可见,那他的作用域就是其所在的源文件;
3、 函数内部的局部变量,只在其函数 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号