0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是“三字母词”

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2022-03-15 09:27 次阅读
工程师接盘了前同事的项目,进度一拖再拖。最后发现问题出现在如下代码:
// 注释语句 ??/a=b+c;

请注意代码中的“??/”,就是这注释隐藏的很深,让项目一拖再拖。

"??/"会被编译器当作 /,变成C语言的换行符(多行代码连接符)。

于是这段代码等同于// 注释语句 a = b+c ;就会被注释掉。

下面我们就是说说“??/”这种“三字母词”的内容。

什么是“三字母词”

在ANSI标准中,定义了“三字母词”,或者成为“三联符序列”,英文为"trigraph sequences"。目的主要是为了在一些特定的字符集中,比如一些七位代码集中,解决一些特定字符的输入问题。

也许是由于这些字符集我们基本上用不到,所以在大多数C语言的书籍中,我们都看不到对“三字母词”的讲解。这里资料来源于参考ANSI C99标准(即传说中的《American National Standards Institute for Programming Languages-C》 1999年,我们习惯简称为“C99”)“三字母词”主要有9个,分别为:

4ae4712c-a3ec-11ec-952b-dac502259ad0.png

源代码中的“三字母词”,在编译阶段会被替换为“对应的字符”。对于以“?”开头的字符序列,如果不能与上面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

    文章

    229

    浏览量

    25013
  • 代码
    +关注

    关注

    30

    文章

    4603

    浏览量

    67386

原文标题:接盘前同事项目,被字符“??/ ”坑惨

文章出处:【微信号: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

    开发语音产品时设计唤醒和命令的技巧

    :“吃饭啦”;生僻字和零声应尽量避免,如“语音识别”中“语音”两个字均为零声;命令中的
    发表于 10-25 15:09

    变压器规格型号容量功率解答

    变压器的类别、结构、特征和用途,后部分代表产品的额定容量和高压绕组的额定电压等级,其型号中的字母所代表的含义如下: 第一位字母表示变压器的类别,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 1170次阅读

    三字节二进制无符号数除以单字节二进制数

    三字节二进制无符号数除以单字节二进制数 入口条件:被除数在R3、R4、R5中,除数在R7中。出口信息:OV=0 时,双字节商在R4、R5中,OV=1
    发表于 01-19 22:47 1749次阅读

    场效应极管的型号命名方法及参数

    场效应极管的型号命名方法及参数   现行有两种命名方法。第一种命名方法与双极型极管相同,第字母J代表结型场效
    发表于 11-09 15:30 2274次阅读

    场效应极管的型号

    场效应极管的型号   场效应极管的型号, 现行有两种命名方法。其一是与双极型极管相同,第字母J代表结型场效应管,O代表绝缘栅场效
    发表于 11-09 15:57 4668次阅读

    如何有效提高机器人伺服电机的过载能力?

    说起对工业机器人的性能要求,无非就是“快、准、狠”三字。其实这也就是对机器人关节伺服电机的要求,今天我们就来拆解一下这三字背后的含义。
    发表于 10-24 15:17 3797次阅读

    LCD1602字母流动显示C语言程序资料免费下载

    本文档的主要内容详细介绍的是LCD1602字母流动显示C语言程序函数资料免费下载。
    发表于 12-24 08:00 11次下载
    LCD1602<b class='flag-5'>字母</b>流动显示C语言程序资料免费下载

    电流互感器的型号表示及作用

    —穿墙式;Z—支柱式;M—母线式;D—单匝贯穿式;V—结构倒置式;J—零序接地检测用;W—抗污秽;R—绕组裸露式 第三字母:Z—环氧树脂浇注式;C—瓷绝缘;Q—气体绝缘介质;W—与微机保护专用 第四字母:B—带保护级;C—差动保护;D—D级;Q—加强型;J—加强型ZG 第
    的头像 发表于 07-12 14:57 1.1w次阅读

    C语言中的“三字母”是什么

    编译器当作 /,变成C语言的换行符(多行代码连接符)。于是这段代码等同于// 注释语句 a = b+c ;就会被注释掉。 下面我们就是说说“??/”这种“三字母”的内容。 什么是“三字母
    的头像 发表于 09-26 14:46 2409次阅读

    一文了解场效应极管型号规则及参数含义

    场效应极管管现行有两种命名方法。第一种命名方法,型号的第字母J代表结型场效应管,O代表绝缘栅场效应管。第二位字母代表材料,D是P型硅,反型层是N沟道;C是N型硅P沟道。例如,3D
    的头像 发表于 04-23 10:40 563次阅读
    一文了解场效应<b class='flag-5'>三</b>极管型号规则及参数含义