设为首页 加入收藏

TOP

6.1.1 完全定义的行为
2013-10-06 23:55:03 来源: 作者: 【 】 浏览:57
Tags:6.1.1 完全 定义 行为
6.1.1 完全定义的行为
这是由C++(www.cppentry.com)标准完全指定的行为;如果一款编译器不能编译具有完整定义的行为的源代码,使其依照C++(www.cppentry.com)标准的规定做事情,那么该编译器必然含有臭虫(buggy)。比方说,C++(www.cppentry.com)标准要求以下源代码可以通过编译,并得到一个输出为2的程序:
注意,我们需要#include <istream>,因为标准并没有指定<iostream>要为输入和输出对象 提供完全的行为(尽管许多专家认为标准应当这么做)。标准仅仅要求<iostream>声明std命名 空间中的名字cout、cerr、clog、cin、wcout、wcerr、wclog和wcin。大多数实现都在 <iostream>中包含了<istream>和<ostream>。尽管标准允许如此,但未作要求。
我之所以挑选上面的例子,是因为如果用C++(www.cppentry.com)编译器来编译,则等价的C程序
拥有完全同样的要求,但如果用一个旧款C编译器来编译,要求则有所不同。第一个问题 是,C++(www.cppentry.com)指定了main()函数缺少返回语句时的行为(相当于在该函数末尾加上return 0;)。
但C没 有指定,因此在旧的C中return语句的缺失被视为一个错误。C的最新版本(常称为C99,以区 别于仍广为使用的、于1989/90年标准化、于1994年修订的版本)具有与C++(www.cppentry.com)相同的行为:离开 main的末尾等价于return 0;。 第二个问题是,在C中字符字面量的类型是int而不是char。int的大小是由实现定义的,在 多数系统上是2或4个字节。然而,以上代码的以下变体,不论使用C或C++(www.cppentry.com)编译器,都必须输 出2。
这是因为C和C++(www.cppentry.com)标准都将sizeof char定义为1,char占用两种语言中可直接访问的最小内存。
【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇6.1.4 未定义的行为 下一篇6.2.2 多序列点

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: