C++中DigraphsTrigraphs和Tokens的深入讲解

之前也是偶然间了解到C++的Digraph(双字符组),但是当时没有进行扩展了解,没想到C++还有Trigraph(三字符组)…,这个概念其实也很简单,维基百科的词条三字符组与双字符组写的也很清楚,就直接搬运过来一下。

下面话不多说了,来一起看看详细的介绍吧

缘起

C语言的源程序的最低必须的字符集是基于7位ASCII码字符集,是ISO646-1983InvariantCodeSet的一个超集。ISO646最初是1972年颁布的一项国际化的7位ASCII标准,规定了12个字符所对应的码位保持对各国标准开放:#$@[\]^`{|}~。因此法国标准AFNORNFZ62010-1982把码位0x7c(ASCII码的|)定义为ù,用法文键盘就难以输入C语言的位或运算符|;码位0x7e(ASCII码的~)定义为¨(即分音符),法文键盘就难以输入C语言的位非运算符~。加拿大法语标准CSAZ243.4-1985中把码位0x5e(ASCII码的^)在定义为é,导致难以输入C语言的异或运算符^。

三字符组

为解决上述的C语言源代码输入问题,C语言标准规定预处理器(Cpreprocessor)在扫描处理C语言源文件时,替换下述的3字符出现为1个字符

注意:编译器对三字符组的处理是在解析注释、宏的步骤的前面,可以理解为优先处理三字符组

那我们再回头看上面那个题,其等价于:

注意:Trigraph(三字符组)在C++17被移除了语法

从MicrosoftVisualC++2010版开始,该编译器默认不再自动替换三字符组。如果需要使用三字符组替换(如为了兼容古老的软件代码),需要设置编译器命令行选项/Zc:trigraphs

g++仍默认支持三字符组,但会给出编译警告。

双字符组

1994年公布了一项C语言标准的修正案,引入了更具有可读性的5个双字符组。这也包括进了C99标准。

双字符组替换为<:[:>]}%:#

不同于三字符组在源文件的任何出现都会被预处理器替换,双字符如果出现在字符串字面值(quotedstring)、字符常量、程序注释中将不被替换。双字符组的替换发生在编译器对源程序的tokenization阶段(即识别出关键字、标识符等,类似于自然语言的“断词”),仅当双字符组作为一个token或者token的组成部分时(如%:%:被替换为预处理运算符##),双字符组才被替换为单字符。g++支持上述双字符组替换。但MicrosoftVisualC++不支持双字符组替换。

Token

C++标准支持C语言的三字符组与双字符组(包括C99中的增补)。C++自身还提供了下述内置的关键字:

关键字等价于and&&bitor|or||xor^compl~bitand&and_eq&=or_eq|=xor_eq^=not!not_eq!=

MicrosoftVisualC++编译器要求如果使用上述关键字,必须包含头文件ciso646,否则编译报错。如“errorC2065:‘not':undeclaredidentifier”。而g++编译器就不要求包含头文件ciso646。

THE END
1.C++博客C++编码风格指南 http://www.cppblog.com/lucency/archive/2008/05/23/50829.html <dc:creator>季阳</dc:creator> <author>季阳</author> <pubDate>Fri, 23 May 2008 01:09:00 GMT</pubDate> <guid>http://www.cppblog.com/lucency/archive/2008/05/23/50829.html</guid> <wfw:comment>http://wwhttp://www.cppblog.com/lucency/Rss.aspx
2.C++之父领衔海内外大咖齐聚,全球C++及系统软件技术大会圆满收官在“现代C++最佳实践”分论坛上,Adobe、彭博集团、字节跳动、码题诗等国内外企业与平台代表,以及系统内核专家和资深软件技术顾问齐聚一堂,共同交流现代C++语言的演进与工程实践。他们围绕编译器优化、跨平台应用移植、开源库生态建设、CPU架构特性应用和安全编程等关键话题,结合各自企业的实际场景,分享了在复杂系统开发中的https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/144303244
3.C/C++技术交流论坛本版块主要为C/C++资源分享站,含课程资源、视频资源,项目源码,对C/C++资源感兴趣的朋友可随时关注本版块。如发现资源失效,可联系播妞QQ号3414556270,进行资源修复和资料索要。http://bbs.itheima.com/forum-407-1.html
4.www.cctry.comVC驿站C语言C++MFC编程学习交流论坛www.cctry.com - VC驿站-C语言 C++ MFC 编程学习交流论坛 - 网站收录,反向链接,国内排名,搜狗评级,谷歌评级,百度权重,360评级,SEO信息,META信息,web服务,Alexa排名,whois信息,链接情况,备案信息等SEO网站综合查询结果http://www.fwol.cn/seo/?url=www.cctry.com
5.2024年全球C++及系统软件技术大会官方网站2024全球C++及系统软件技术大会 - 涵盖行业核心热门话题,40+行业一线导师携实操经验亲临,40+场精选实战分享,带来全方位深入行业技能探索,1000+精英同行,拓展人脉,挖掘合作新机遇。https://cpp-summit.org/
6.Dotcpp靠谱的程序员交流社区专业、全面的代码分享和编程学习,拥有数百万份的C/C++/java/python程序代码大全和高质量讲解!https://blog.dotcpp.com/
7.水灾害防御全国重点实验室新闻动态会上,彭世彰主任汇报了实验室验收的准备工作,分析了实验室现状、面临的形势及当前的任务。验收申请时间初定在4月下旬。他强调,借验收的机会,促进实验室建设,在应用基础研究、人才培养与团队建设、学术交流、运行管理等方面更上一个台阶,迎接2008年3月国家重点实验室的评估。 http://hydro-lab.hhu.edu.cn/shownews.asp?news_id=584
8.OSCHINA告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐 486阅 云计算专区 169.6万人关注 Coolbpf 最新特性系列解读:eNetSTL 网络功能加速库在龙蜥社区开源 291阅 揭秘Zadig 多环境配置最佳实践 - Helm Chart 篇 530阅 Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍 https://www.oschina.net/
9.预约社区帖子搜索 预约社区-专业易语言编程学习交流论坛?论坛 免费看大片手机欢乐斗地主文字广告文字广告文字广告 文字广告文字广告文字广告文字广告文字广告 今日:4441|昨日:5|帖子:70527|会员:85804|欢迎新会员:pangk 最新回复 下载桌面快捷访问 预约社区提醒:交易请务必通过淘宝等网站进行担保交易,勿听信他人诱导/花言巧语http://bbs.52xiee.com/
10.编程导航学编程,就来编程导航,程序员免费编程学习交流社区。Java,Python,前端,web网站开发,C语言,C++,Go,后端,SQL,数据库,PHP入门学习、技能提升、求职面试法宝。提升编程效率、优质IT技术文章、海量计算机教程资源、精品实战项目,跟百万开发者学习交流成长。编程导航,做您编程http://home.code-nav.cn/
11.思妙未来思妙未来为大家精选少儿编程快速导航:包括了少儿编程常用工具,少儿编程考试认证推荐,少儿编程白名单竞赛,少儿编程社区推荐和少儿编程免费学习资料分享等等。涵盖了Scratch、Python、C++等主流少儿编程编程语言,助力孩子们交流学习,快速成长!阅读全文 荐读:2022蓝桥组委会倾力推荐,最实用的Scratch少儿编程备考书籍http://www.simiaocode.com/
12.中职计算机专业实习报告(通用15篇)3.学习与各职人员的交流,集中全力为一个目的,就是使工作完成的地最佳。 解决的主要问题及效果 在公司实习期间,在师傅的帮助下我用书面的方式整理了不少关于硬件故障的经验,比如说:我们可以在电脑启动的.时候就可以通过声音来判断故障:1短:启动正常,2短:非致命错误,1长1短:显示错误,1长2短:键盘错误;计算机蓝屏https://www.oh100.com/a/202205/4712152.html
13.惧留孙网惧留孙网打造有交流的学习网站。欢迎来到惧留孙网。千人大群实时交流,管理员常年在线,有问题随时问哦。站内电子书、编译器免费下载!http://juliusun.com/
14.c++官方网站C++ programmer’s guide to undefined behavior: part 10 of 11By Andrey Karpov | Nov 29, 2024 01:09 AM EventsEvents RSS Meeting C++ 2024: the last hybrid C++ conference?By Meeting C++ | Oct 25, 2024 02:05 AM 30 days until Meeting C++ 2024!By Meeting C++ | Oct 15, 2024 06:56 AM https://isocpp.org/
15.最好的5个C++网站技术标签:C++ 查看原文 好吧我摊牌了,这是C++最好的5 个网站 相对其他语言来说,C++算是难度比较高的了,这一点无法否认。但是如果能有一些好的网站,则会让C++的学习事半功倍。那就来介绍几个最常用的(最好的)吧,包含了参考手册、教程、框架/库列表1.cppreference网址:https://en.cppreference.com/whttps://www.pianshen.com/article/1086948553/
16.thec++resourcesnetworkThere is now a Safe C++ proposal that extends C++ by defining a superset of the language that can be used to write code with strong safety guarantees. See: htt Dec 3, 2024 at 4:24am [104 replies] Last:https://news.ycombinator.com/item?id=42231489 I've been reading quite(https://www.cplusplus.com/
17.推荐两个C++API参考网站腾讯云开发者社区如果你也遇到这样的问题。下面两个C++API网站正好是你需要的利器。 中文版C++ 参考手册 https://www.apiref.com/cpp-zh/index.html 这个网站已经支持到C++20了。 除此之外,网站内也有接口的示例代码,方便了解怎么使用。 让人惊喜的是,除了C++外,这个网站的主页上还收录了非常多其他的资源。 https://cloud.tencent.com/developer/article/1983531
18.LearnC++–SkillupwithourfreetutorialsLearnCpp.com is a free website devoted to teaching you how to program in modern C++. The lessons on this site will walk you through all the steps needed to write, compile, and debug your C++ programs. No prior programming experience is necessary, but programmers of all levels will benefithttp://www.learncpp.com/