社区
C语言
帖子详情
100分 讨论
zzyjsjcom
2007-09-27 08:07:51
大家说说 c语言的未定义行为??
...全文
189
12
打赏
收藏
100分 讨论
大家说说 c语言的未定义行为??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzyjsjcom
2007-09-28
打赏
举报
回复
大家到下面这个连接 回两贴, 给错分了,但没其他人回贴,我结不了贴啊.....
http://community.csdn.net/Expert/TopicView3.asp?id=5776445
星羽
2007-09-27
打赏
举报
回复
未定义行为顾名思义就是标准没有对其作出具体规定的行为。比如“fclose 两次”其行为就是一个未定义行为。
对于未定义行为,标准允许编译器可以任意定义一个具体实现,因此这样的行为其结果不是确定的。比如对于上述未定义行为,其具体实现可以是:fclose函数返回错误码、出现段错误程序终止、或者任何其它可能的实现。
由于未定义行为会使程序出现不确定的运行结果从而达不到程序的预定目的,所以这不是我们所希望出现的。因此,一定不要让未定义行为出现在程序中,这是程序员的一个基本职责。比如,“fclose 两次”这个行为会导致未定义行为,那么在程序中就绝对要避免出现“fclose 两次”这样的错误。
对于程序员来说,导致未定义行为产生的行为(如“fclose 两次”)其实就是标准的禁止事项。如果未定义行为在程序中出现了,说明这个程序违反了标准的规定,是非法程序。
星羽
2007-09-27
打赏
举报
回复
去看看这个文章,为定义东西太多了
http://blog.chinaunix.net/u/17660/showart.php?id=302210
星羽
2007-09-27
打赏
举报
回复
上面
这段代码在运行时会出错,而编译时连警告也没有。一上来我们就会想到是test的问题,一定是类型不匹配。
那么,为什么前后两个test的类型不匹配呢?很简单,从数组到指针的转换是隐式的,但是前提是编译器能够根据上下文判断出需要这种转换。由于C++编译器一次只编译一个源文件,所以,在编译的时候没有足够的信息告诉编译器来进行这种转换,出错是必然的。
既然不匹配,为什么不发出警告呢?因为这是一个未定义的行为!在C++中,编译器没有责任来提示未定义的行为。甚至编译器可能根本认不出未定义的行为。至于链接器的行为,也是如此。
星羽
2007-09-27
打赏
举报
回复
/*******************************************/
/* file foo.cc */
extern char test[] = "helloworld";
/*********************************************/
/* file bar.cc */
#include <iostream>
extern char* test; /* this line will be commented later. */
// extern char test[]; /* this line will be uncommented later. */
int main()
{
std::cout << test << std:: endl;
}
星羽
2007-09-27
打赏
举报
回复
“未定义行为(undefined behavior)”跟“未指定行为(unspecified behavior)”之间的重大区别。前者是对于不正确的,有毛病的程序而言,未定义行为可能是任何行为,轻则出现意料之外的结果,重则程序崩溃(崩溃还算好的,糟的就是错了还一声不吭^_^)。后者则是对于well-formed程序而言,未指定(unspecified)行为的可能性一般是有限的(例如函数参数的求值顺序就是函数参数个数的全排列种),只不过具体的实现不用在文档里说明究竟在它的实现上的特定行为是怎样的。』 顺便提一下“由实现定义的行为(implementation defined)”,这一行为跟“unspecified behavior”比较类似,都是针对well-formed程序而言,只不过后者的具体行为需要特定实现注明在文档中,让用户知道。 我们一直以为i=(i++)的行为是unspecified,即以为它至少还是well-formed程序,只不过在不同编译器上有不同结果罢了,然后结果却大谬不然,其行为是undefined,可能产生任何结果(从概念上来说,甚至可能导致程序崩溃^_^)。
i = (i++)这种表达式如果i是用户自定义迭代器的话,其行为却又变成了 unspecified,甚至由于这里左端表达式并没有实际的side-effect,所以其结果甚至是 定 的!这就是说,在build-in operation跟user-defined operator之间某些情况下存在着不易察觉的隐晦差别。
星羽
2007-09-27
打赏
举报
回复
jiangsheng(蒋晟.Net[MVP])
传说中的钻石黄老5
ivy1023
2007-09-27
打赏
举报
回复
个人感觉回掉函数,就是这样的。
回调函数决定调用时机与怎么调用,而客户程序负责具体实现。
好多驱动程序以及库函数就是这样实现的。
ckt
2007-09-27
打赏
举报
回复
第一次这里见到MVP
蒋晟
2007-09-27
打赏
举报
回复
http://community.csdn.net/IndexPage/SmartQuestion.aspx#bespecific
世界上大部分的东西都不在C++的定义之内
lockhall
2007-09-27
打赏
举报
回复
搬个板凳,等人总结。
ckt
2007-09-27
打赏
举报
回复
往指针里写数据
基于SSM大学生自主学习平台(毕设)
1,项目功能:开发一个在线学习平台,一共3个身份:管理员,老师和学生! ①管理员功能:登录后可以添加学生信息,管理所有学生信息,添加单个老师信息,也可以批量导入很多老师信息,管理所有老师信息,添加和管理学院信息,发布课程信息,管理所有课程,查看回复话题
讨论
信息,发布网站公告,管理网站公告信息! ②教师功能:上传课程视频信息,查询管理所有教学视频,上课课程文档课件信息,查询管理所有课件文档,新增
讨论
话题信息,查询编辑管理所有话题信息,按照课程发布作业信息,可以向某次作业中加入题目信息,也可以删除题目信息,每个题目带有
分
数值,老师可以修改个人信息。 ③学生功能:查询所有课程信息,在线课程视频信息查询,可以在线观看某个视频教学,查询和下载所有的课件文件,查看所有话题
讨论
信息,可以回复话题,也可以查看话题的回复信息,可以查询网站公告信息,查询老师布置的作业,进入作业题目列表做题,提交可以查看完成作业的
分
数,可以修改个人信息。2,涉及技术:SSM框架(Spring,SpringMVC,MyBatis),MySQL数据库,Maven,Tomcat3,开发环境:IDEA4,讲解方式:从环境安装,项目搭建,以及项目介绍等进行讲解5,包含资料:项目源码(含数据库文件),环境安装包,项目文档。
给出一个百
分
制成绩,要求输出成绩等级A,B,C,D,E。90
分
以上为A,80~89
分
为B,70~79
分
为C,60~69
分
为D,60
分
以下为E
1、给出一个百
分
制成绩,要求输出成绩等级A,B,C,D,E。90
分
以上为A,80~89
分
为B,70~79
分
为C,60~69
分
为D,60
分
以下为E.要求: (1)
分
别用if语句和switch语句实现; (2) 当输入非法数据(如负数)时,应给出“输入数据错误“信息 switch语句实现: #include intmain() { intscor
1051: 习题4-8-1 百
分
制成绩转换为等级
1051: 习题4-8-1 百
分
制成绩转换为等级 时间限制: 1 Sec内存限制: 12 MB 提交: 303解决: 256您该题的状态:已完成 [提交][状态][
讨论
版] 题目描述 从键盘输入一百
分
制成绩,要求输出其所对应的等级'A', 'B', 'C', 'D'。85
分
以上(含)为'A',70~84
分
之间为'B',60~69
分
之间为'C',60
分
以下为'D'。 请用if语句实...
C++实验——参赛歌手计算平均
分
问题:去掉一个最高
分
,去掉一个最低
分
,将剩下
分
数的平均值作为选手的最后成绩。这里假设共有10位评委,都是按照百
分
制打
分
。
话不多说,先上我写的代码然后
讨论
://歌唱大赛选手成绩计算 //去掉一个最高
分
,去掉一个最低
分
,将剩下
分
数的平均值作为选手的最后成绩。这里假设共有10位评委,都是按照百
分
制打
分
。 #include <iostream> #include <string> const int Arsize = 10; int main() { using namespace std; ...
suse和linux区别,大家一起
讨论
讨论
,suse和ubuntu的区别,顺便散散
分
我对linux没有很深的了解,不过还是挺感兴趣的,想去学。目前接触过的是suse,和ubuntu,他们都是基于linux内核的操作系统。我只知道:suse相对而言是企业级的,比较适合企业级服务器的运用,ubuntu是家里电脑上装的,感觉相对而言更加desktop一些。想和大家一起
讨论
讨论
,同样是linux操作系统,他们在哪些技术方面的差异使得他们的方向不同。级别比较低,只有
100
分
可以散,不好意...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章