某工程师接盘了前同事的项目,进度一拖再拖。最后发现问题出现在如下代码:
// 注释语句 ??/a=b+c;
请注意代码中的“??/”,就是这注释隐藏的很深,让项目一拖再拖。
"??/"会被编译器当作 /,变成C语言的换行符(多行代码连接符)。
于是这段代码等同于// 注释语句 a = b+c ;就会被注释掉。
下面我们就是说说“??/”这种“三字母词”的内容。
什么是“三字母词”
在ANSI标准中,定义了“三字母词”,或者成为“三联符序列”,英文为"trigraph sequences"。目的主要是为了在一些特定的字符集中,比如一些七位代码集中,解决一些特定字符的输入问题。
也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对“三字母词”的讲解。这里资料来源于参考ANSI C99标准(即传说中的《American National Standards Institute for Programming Languages-C》 1999年,我们习惯简称为“C99”)。“三字母词”主要有9个,分别为:源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面9个匹配,编译器将保持原状;一旦匹配,编译器就会做替换。“三字母词”例子例子1:C99标准中给出的例子
printf("Eh???/n");
相当于:
printf("Eh/n");
例子2:一个我们容易犯的错误(摘自《Pointers On C》)
printf("Delete file (are you really sure??):");
运行结果为(三字母词“??)”编译时替换为“]”):
Delete file (are you really sure]:
而不是我们想象中的:
Delete file (are you really sure??):
最后
由于编译器的种类各样,对ANSI C的支持也不一样,所以可能会有些C语言编译器不处理“三字母词”,会将它们当做普通的字符串来处理。审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
字符
+关注
关注
0文章
232浏览量
25170 -
代码
+关注
关注
30文章
4742浏览量
68327
原文标题:接盘前同事项目,被字符“??/ ”坑惨
文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
场效应三极管的型号命名方法
`场效应三极管的型号命名方法<br/> 现行有两种命名方法。第一种命名方法与双极型三极管相同,第三位字母J代表结型场效应管,O代表绝缘栅场效应管。第二位
发表于 04-25 15:42
如何辩别场效应管与三极管
`从型号区分 场效应管型号如IRF......... 三极管型号如国产:3DD,国外:2S......... 场效应管有两种命名方法。第一种命名方法与双极型三极管,第三位字母J代表结型
发表于 07-11 11:41
Proteus 8*8数码显示管编译26位字母和0-9数字代码
Proteus 8*8数码显示管编译26位字母和0-9数字代码const int row1=2;const int row2=3;const int row3=4;const int row4=5
发表于 10-30 17:31
变压器规格型号容量功率解答
变压器的类别、结构、特征和用途,后部分代表产品的额定容量和高压绕组的额定电压等级,其型号中的字母所代表的含义如下: 第一位字母表示变压器的类别,O表示降压自耦,D表示单相;S表示三相。 第二位
发表于 05-16 15:46
M0518用串口接收数据时,第一个字节是正常的,为什么后面的第二、三字节却是乱的?
M0518用串口接收数据时出问题。发送端共发送3个字节,固定第一字节数据会改变,其它两个字节的数据一直为0,可是接收端收到的数据,第一个字节是正常的,后面的第二、三字节却是乱的。本应为0的,但是像
发表于 08-21 07:13
MCS51三字节无符号除法程序(ASM)
MCS51三字节无符号除法程序(ASM)
;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7;入口 :R2,R3,R4,R7;占用资源:ACC,B,F0;堆
发表于 01-16 11:54
•1205次阅读
三字节二进制无符号数除以单字节二进制数
三字节二进制无符号数除以单字节二进制数
入口条件:被除数在R3、R4、R5中,除数在R7中。出口信息:OV=0 时,双字节商在R4、R5中,OV=1
发表于 01-19 22:47
•1783次阅读
场效应三极管的型号
场效应三极管的型号
场效应三极管的型号, 现行有两种命名方法。其一是与双极型三极管相同,第三位字母J代表结型场效应管,O代表绝缘栅场效
发表于 11-09 15:57
•4743次阅读
如何有效提高机器人伺服电机的过载能力?
说起对工业机器人的性能要求,无非就是“快、准、狠”三字。其实这也就是对机器人关节伺服电机的要求,今天我们就来拆解一下这三字背后的含义。
发表于 10-24 15:17
•3890次阅读
电流互感器的型号表示及作用
—穿墙式;Z—支柱式;M—母线式;D—单匝贯穿式;V—结构倒置式;J—零序接地检测用;W—抗污秽;R—绕组裸露式 第三字母:Z—环氧树脂浇注式;C—瓷绝缘;Q—气体绝缘介质;W—与微机保护专用 第四字母:B—带保护级;C—差动保护;D—D级;Q—加强型;J—加强型ZG 第
C语言中的“三字母词”是什么
编译器当作 /,变成C语言的换行符(多行代码连接符)。于是这段代码等同于// 注释语句 a = b+c ;就会被注释掉。 下面我们就是说说“??/”这种“三字母词”的内容。 什么是“三字母词
一文了解场效应三极管型号规则及参数含义
场效应三极管管现行有两种命名方法。第一种命名方法,型号的第三位字母J代表结型场效应管,O代表绝缘栅场效应管。第二位字母代表材料,D是P型硅,反型层是N沟道;C是N型硅P沟道。例如,3D
评论