什么是C ??!??!操作员呢?
我看到一行C看起来像这样:
!ErrorHasOccured() ??!??! HandleError();
它编译正确,似乎运行正常。 看起来它正在检查是否发生了错误,如果有错误,它会处理它。 但我不确定它在做什么或它是如何做的。 看起来程序员正试图表达他们对错误的看法。
我从来没有见过??!??!
在使用任何编程语言之前,我无法在任何地方找到它的文档。 (谷歌没有帮助搜索条件,如??!??!
)。 它做了什么以及代码示例如何工作?
#1楼
如前所述??!??!
本质上是两个三元组 ( ??!
和??!
再次)组合在一起,被替换 - 翻译为||
预处理器,即逻辑OR 。
包含每个三字母的下表应该有助于消除替代三字母组合的歧义:
Trigraph Replaces??( [
??) ]
??< {
??> }
??/ \
??' ^
??= #
??! |
??- ~
资料来源: C:参考手册第5版
所以看起来像??(??)
的三元组最终将映射到[]
, ??(??)??(??)
将被[][]
等替换,你得到了这个想法。
由于在预处理期间替换了三字符,您可以使用cpp
自己获取输出视图,使用一个愚蠢的trigr.c
程序:
void main(){ const char *s = "??!??!"; }
并处理它:
cpp -trigraphs trigr.c
你将得到一个控制台输出
void main(){ const char *s = "||"; }
您可以注意到,必须指定选项-trigraphs
,否则cpp
将发出警告; 这表明卦是如何成为过去的事物而且没有现代价值,除了混淆可能碰到它们的人 。
至于引入三字母的基本原理,在查看ISO / IEC 646的历史部分时可以更好地理解:
ISO / IEC 646及其前身ASCII(ANSI X3.4)在很大程度上支持了有关电信行业字符编码的现有做法。
由于ASCII没有提供除英语之外的语言所需的许多字符,因此制作了许多国家变体,用一些较少使用的字符替换了所需的字符 。
(强调我的)
因此,从本质上讲,某些必需的角色(存在三角形的角色)在某些国家变体中被替换。 这导致使用由其他变体仍然存在的字符组成的三字符的替代表示。
#2楼
??!
是一个翻译为|
的三字符 。 所以它说:
!ErrorHasOccured() || HandleError();
由于短路,相当于:
if (ErrorHasOccured())HandleError();
本周的大师 (处理C ++,但在这里相关),我选择了这个。
三角形的可能起源或@DwB在评论中指出,由于EBCDIC很难(再次),它更可能发生。 这篇关于IBM developerworks董事会的讨论似乎支持这一理论。
来自ISO / IEC 9899:1999§5.2.1.1,脚注12(h / t @ Random832):
三字符序列允许输入未在ISO / IEC 646中描述的不变代码集中定义的字符,ISO / IEC 646是七位US ASCII代码集的子集。
#3楼
这是一个C 三连词 。 ??!
是|
,所以??!??!
是运算符||
#4楼
那么,为什么这一般存在可能与你的例子中存在的原因不同。
这一切都始于半个世纪前,将硬拷贝通信终端重新用作计算机用户界面。 在最初的Unix和C时代,那是ASR-33电传打字机。
这个设备很慢(10 cps),噪音和丑陋,它的ASCII字符集视图以0x5f结束,因此它(仔细观察图片)没有任何键:
{ | } ~
定义三字母以解决特定问题。 我们的想法是,C程序可以使用ASR-33上的ASCII子集以及缺少高ASCII值的其他环境。
你的例子实际上是两个
??!
,每个意思|
,结果是||
。
然而,几乎按照定义编写C代码的人有现代设备1,所以我的猜测是: 有人炫耀或自娱自乐,在代码中留下一种复活节彩蛋供你找。
它确实有效,它导致了一个广受欢迎的SO问题。
ASR-33电传打字机
1.就此而言,三角形是由ANSI委员会发明的,它在 C成功失败后首次遇到,因此原始的C代码或编码器都不会使用它们。
什么是C ??!??!操作员呢?相关推荐
- AI一分钟|Uber撤裁100名无人车操作员;京东金融将融资130亿人民币
▌自动驾驶测试不顺,Uber 裁掉 100 名无人车操作员 据科技博客 TechCrunch 北京时间 7 月 12 日报道,打车应用 Uber 已经在美国旧金山和匹兹堡裁掉了大约 100 名自动驾驶 ...
- 计算机操作员中级操作试题,中级计算机操作员应知模拟考试试题(一)
中级计算机操作员应知模拟考试试题(一) 中级计算机操作员应知模拟考试试题(一) 一.是非判断题(正确的打"√",错误的打"╳",每小题1分,共20分) (1)电 ...
- 计算机操作员高级理论试题答案,计算机操作员高级理论试题答案1.doc
计算机操作员高级理论试题答案1 计算机操作员高级理论试题答案()一.?填空题(共15项空格,每空1分,共15分) 1.?调用Word助手的快捷键是? ??. 2.目前常见的网络操作系统主要有Netwa ...
- 8 .5 .5 创建操作员
操作员是接收有关SQL Server代理作业和警报的通知的对象.操作员可以代表一个人, 也可以代表一个组.操作员没有与数据库或服务器主体关联,但独占SQL Server代理服务. 在本章前面的部分中, ...
- 计算机操作员考评标准,计算机操作员职业技能鉴定标准.doc
计算机操作员职业技能鉴定标准 计算机操作员职业技能鉴定标准 ? 一.职业概况 1.1 职业名称:计算机操作员 1.2 职业定义:使用电子计算机微机从事文字.图形.图像等信息处理工作及计算机系统操作,维 ...
- 计算机操作鉴定所需设备,计算机操作员职业技能鉴定标准(高级)
计算机操作员职业技能鉴定标准 一.职业概况 1.1 职业名称:计算机操作员 1.2 职业定义:使用电子计算机微机从事文字.图形.图像等信息处理工作及计算机系统操作,维护与管理的人员. 1.3 职业等级 ...
- stm32 火灾自动报警及联动控制源码_中级消防设施操作员关键技能之十四:能测试火灾自动报警系统联动功能...
点击蓝字 关注我们 中级消防设施操作员关键技能 之十四: 能测试火灾自动报警系统联动功能 火灾报警控制器和消防联动控制器的设置要求 01 1.火灾报警控制器和消防联动控制器,应设置在消防控制室内或有人 ...
- 中职高级计算机操作员,计算机操作员专业排行榜
计算机操作员专业排行榜,学校师资力量较强,管理团队和师资团队均为引进国内知名汽车专修院校人才,采用先进的现代化汽车检测与与维修的教学方法,实现理论与实训教学. 计算机操作员专业排行榜, 可考取计算机- ...
- 建立SQL Server警告和给操作员发送email通知
数据库邮件 首先建立数据库邮箱具有一个叫做SQLAlerts的profile.这个profile可以以任何名称来命名,但是在这些指导中,引用的是profile名称SQLAlerts.如果你想用一个不同 ...
- 计算机操作员实操高级试题,计算机操作员高级实操(以往考过,可做平时练习素材)答题.doc...
试题1.计算机安装.连接.调试 试题2.文字录入 b)中文基本录入:在十分钟之内录入以下中文内容,错误率不高于千分之三. c)公式录入:在文档的结尾处录入下列公式. d)完成以上操作后,将最终结果以& ...
最新文章
- excel甘特图模板_类似这样的甘特图是怎么做的?
- Windows 11 预览版泄露!有 macOS 那味儿了......
- 项目管理利器taiga快速安装
- containers文件夹可以删除吗_电脑进行C盘清理,appdata文件夹可以删除吗?
- JVM—垃圾回收与算法
- 简单谈谈Server2008的NAP到底是什么
- 字符串、对象、数组操作方法、json方法
- bzoj 1083: [SCOI2005]繁忙的都市
- 机器学习之熵【从定义到代码】
- 21天java基础入门总结
- Lingo11 解决优化问题( 下载和运行 )
- 阿里云域名转入/转出操作教程
- ZigBee模块(DL-20)在调试过程中的问题及解决方案
- MySQL-- 统计函数
- 基于labview的虚拟简单信号发生器
- activex服务器与com组件,COM和ActiveX控件设计.ppt
- matlab插图放大模糊,PPT中怎样简单处理放大后失真的图片
- Windows下搭建论坛服务器
- 使用IMU与轮速计进行单线激光雷达的运动畸变校正
- 太厉害了!28岁任北大博导的她,再获科学大奖!