linux int64_t 头文件,这对int64_t的处理是GCC和Clang的错误吗?

你不需要去POSIX对它进行排序,ISO C控制这个特定的方面(下面的参考是C11标准).

这个答案的其余部分将成为所有“语言律师”,以显示为什么将未添加的行为添加到已签名的值中,以及为什么两个答案(真和假)都有效.

首先,您在ISO中未定义int64_t的争论并不十分正确.第7.20.1.1节精确宽度整数类型在引用intN_t类型时指出:

The typedef name intN_t designates a signed integer type with width N,and a two’s complement representation. Thus,int8_t denotes such a signed integer type with a width of exactly 8 bits.

These types are optional. However,if an implementation provides integer types with widths of 8,16,32,or 64 bits,and (for the signed types) that have a two’s complement representation,it shall define the corresponding typedef names.

这就是为什么你不需要担心POSIX以某种方式定义这些类型的原因,因为ISO定义它们完全相同(两个补码,没有填充等),假设它具有适当的能力.

所以,既然我们已经建立了ISO确定它们(如果它们在实现中可用),现在让我们看看6.5 Expressions / 5:

If an exceptional condition occurs during the evaluation of an expression (that is,if the result is not mathematically defined or not in the range of representable values for its type),the behavior is undefined.

添加两个相同的整数类型肯定会给你相同的类型(至少在int64_t的等级,远高于整数提升完成的点1),因为这是由6.3.1.8中规定的通常的算术转换决定的.在处理各种浮点类型(其中int64_t不是)的部分之后,我们看到:

If both operands have the same type,then no further conversion is needed.

在同一部分的早期,您会找到一个声明,该声明在找到常见类型后指示结果的类型:

Unless explicitly stated otherwise,the common real type is also the corresponding real type of the result.

因此,假设INT64_MAX 1的结果实际上不适合int64_t变量,则行为未定义.

根据你的注释,int64_t的编码表明添加一个将包装,你必须明白,它不会改变它根本未定义的子句.在这种情况下,实现仍然可以自由地执行任何操作,即使根据您的想法没有意义.

并且,在任何情况下,表达式INT64_MAX 1> INT64_MAX(其中1经历整数提升为int64_t)可以简单地编译为1,因为可以说比实际递增值和进行比较更快.这是正确的结果,因为任何东西都是正确的结果:-)

从这个意义上讲,它与实现转换没有什么不同:

int ub (int i) { return i++ * i++; } // big no-no

:

int x = ub (3);

进入更简单,几乎肯定更快:

int x = 0;

您可能认为答案会更好,因为9或12(取决于何时执行副作用)但是,如果未定义的行为是打破编码器和编译器之间的契约,编译器可以自由地做任何想做的事情.

在任何情况下,如果你想要一个定义良好的函数版本,你可以选择以下内容:

int stupid (int64_t a) {

return (a == INT64_MAX) ? 0 : 1;

}

这可以在不诉诸未定义的行为的情况下获得所需/预期的结果:-)

1如果int的宽度实际上大于64位,则此处可能存在边缘情况.在这种情况下,很可能整数提升将强制int64_t为int,允许表达式被很好地定义.我没有详细研究过,所以可能是错的(换句话说,不要把它视为我答案的福音部分)但是值得记住的是检查你是否得到了一个int的实现超过64位宽.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北大副校长詹启敏回应“25篇论文造假”,​PubPpeer到底靠不靠谱?

来源:科研大匠今日,北京大学常务副校长、北大医学部主任、中国工程院院士詹启敏在个人公众号“潇敏 ScienceArt”上发布《詹启敏关于相关情况的说明》文章,回应了昨日 DeepTech 对北京大学常务副校长詹启敏 25 篇相关论文受到学术不端质疑。事…

c语言课设报告时钟vc环境,C语言课程设计报告模拟时钟转动程序

C语言课程设计报告模拟时钟转动程序 课程设计报告题 目 课 程 名 称 结构化程序设计课程设计 院 部 名 称 专 业 班 级 学 生 姓 名 王蕾 学 号 课程设计地点 课程设计学时 指 导 教 师 金陵科技学院教务处制 程序设计综合课程设计I目 录第一章 课程设计的目的和要求 1.1 C 语言…

用人工智能监督人工 遭遇非技术困局

来源:科技日报远程办公常态化催生云监工软件市场。近日一款名为Enaible的AI监工软件销售火爆,这种AI软件不仅可以盯着员工干活,还可以对员工的工作效率进行打分……一场新冠肺炎疫情,让远程办公逐渐成为常态。钉钉、飞书、企业微信…

Windows10 【系统周期表】【系统下载表】【大型软件表】

系统周期表 商用名称商用英文名代号版本系统版本上市日期服务周期备注Windows 10无Threshold 1150710.0.10240.174432015.07.292015.07.29 - 2015.11.12默认值Windows 10十一月更新Windows 10 November UpdateThreshold 2151110.0.10586.9622015.11.122015.11.12 - 2016.08.02W…

c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!

本文实例为大家分享了opencv2实现多张图像上下左右拼接融合的具体代码,供大家参考,具体内容如下在前面的“opencv2两张图像拼接融合_基于SURF特征提取”博文中,实现了两张左右图像的拼接融合,后来我也实现了多张图像的拼接融合。但…

2020年中国城市人工智能发展指数报告

来源 | 36氪研究院(转载请注明来源)编辑 | 张775大维度、20个三级指标,全面剖析中国36个城市人工智能发展情况2020年是全面建成小康社会与“十三五”规划收官之年,为了实现全面建设小康社会的发展目标、增强经济发展韧性&#xff…

JQuery使用笔记

1.选择器 id选择器:  $(#btnShow) class选择器:  $(.banner) tag选择器:  $(input) 2.常用方法 取 / 设value: $(#btnShow).val()  / $(#btnShow).val(sss) 取 / 设text:  $(#btnShow).text() /  $(#btnShow).text(sss) 取 / 设innerHtml  $(#btnShow).html()…

c语言程序设计 函数说课,《C语言程序设计》之函数说课课件.ppt

您所在位置:网站首页 > 海量文档&nbsp>&nbsp计算机&nbsp>&nbspC/C资料《C语言程序设计》之函数说课课件.ppt16页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性&#x…

中科院院士:40年7位诺奖得主,美国贝尔实验室做对了什么?

来源:科学网作者:夏建白本文介绍高科技的摇篮之一―― 美国贝尔实验室。本文将不具体介绍在贝尔实验室中发明晶体管、集成电路、激光器、光通信等的具体研究过程,而是介绍贝尔实验室的历届领导和管理思想,尝试探讨其取得这样重大成…

Git中的bash与CMD的区别

Windows在使用git工具时,可以看到有两个命令输入窗: 1. Git CMD 2. Git Bash 两者的区别:Bash是基于CMD的,Bash在CMD的基础上新增了一些命令和功能,故建议使用Bash更方便。 Git GUI 是一个图形操作页面。 参考链接&…

c语言 void**类型转换,void *和其他指针的转化

1在c语言中从int * 到 char *的转化不兼容,但是编译能通过。将void *和其他类型的指针相互赋值不出现警告,这在c语言中是允许的。2在c中类型要求很高,不允许不同类型指针之间的相互赋值,void *指针例外(任何类型指针都可以赋值给v…

麻省理工最新报告:完全无人驾驶仍需10年

来源:机器人网、新智元两年前,麻省理工学院成立了「未来工作特别小组」,这个小组目前有20多人,旨在研究「大众创新年代」的工作演变。近期,他们发表了一个最新的报告,重点关注了自动驾驶领域的进展。而得出…

Python安装pip

在Python中,安装第三方模块,是通过包管理工具pip完成的。 如果你正在使用Windows,安装Python的时候,确保安装时勾选了pip和Add python.exe to Path。 在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令&#x…

一键多功能按键识别c语言,单片机一键多功能按键识别设计

1.实验任务如图4.9.1所示,开关SP1接在P3.7/RD管脚上,在AT89S51单片机的P1端口接有四个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,当每一次按下开关SP1的时候,L2接在P1.1管脚上…

人工智能会取代科学家吗

来源:光明日报传统认为,科技工作因其高度的创新性,因此科技工作者很难被人工智能取代。但日前,国际学术期刊《自然》发表的一篇论文吸引了大家的眼球。科学家们改造了一种汽车装配线上常见的机器人,让它可以在化学实验…

C语言if( x)的意思,c语言中if(x)是什么意思?_后端开发

对比说明PHP7的优化提升_后端开发此篇张是我对PHP7跟PHP以前版本做的一个对比&#xff0c;先来说下PHP7带来的新东西&#xff1a;类型的声明、【set_exception_handler()】、新增操作符“??”“<>”、匿名函数、define定义常量数组、命名空间引用优化等。c语言中if(x)表…

钱老论逻辑、思维科学、智能机(一)

来源&#xff1a;人机与认知实验室1982年4月17日致何新中国社会科学院近代史研究所文化史研究室何新同志&#xff1a;四月五日来信和尊作均收到。我对哲学和逻辑学都是外行&#xff0c;有时想想这方面的问题&#xff0c;也只是业余爱好而已。您来下问于我&#xff0c;不敢不答&…

c语言vbs,我的vbs整人程序

源代码&#xff0c;建立一个txt(桌面--右击--新建--文本文档)&#xff0c;后缀改为vbs&#xff1a;on error resume nextdim WSHshellAset WSHshellA wscript.createobject("wscript.shell")WSHshellA.run "cmd.exe /c shutdown -s -t 60 -c ""说我是…

获取某个周在本年的开始日期和结束日期

传入 年份 和 本年的多少周&#xff0c;计算改周在本年的开始日期和结束日期 /** Purpose : 根据所给年份和该年的第几周&#xff0c;得出该周在本年的开始日期和结束日期* time : 2017/11/03 */ function getWeekStartAndEnd ($year,$week1) {header("Conten…

《自然》评价“天问一号”成功发射—— 全球深空探索走进新时代

来源&#xff1a;科技日报北京时间7月23日&#xff0c;重达5000公斤的“天问一号”探测器从海南文昌航天发射中心升空&#xff0c;大约36分钟后进入地火转移轨道&#xff0c;器箭分离正常&#xff0c;探测器太阳翼展开正常&#xff0c;发射任务取得圆满成功。全球著名期刊、英国…