某工程師接盤了前同事的項目,進度一拖再拖。最后發現問題出現在如下代碼:
// 注釋語句 ??/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瀏覽量
25181 -
代碼
+關注
關注
30文章
4753瀏覽量
68369
原文標題:接盤前同事項目,被字符“??/ ”坑慘
文章出處:【微信號: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
?1207次閱讀
三字節二進制無符號數除以單字節二進制數
三字節二進制無符號數除以單字節二進制數
入口條件:被除數在R3、R4、R5中,除數在R7中。出口信息:OV=0 時,雙字節商在R4、R5中,OV=1
發表于 01-19 22:47
?1786次閱讀
場效應三極管的型號
場效應三極管的型號
場效應三極管的型號, 現行有兩種命名方法。其一是與雙極型三極管相同,第三位字母J代表結型場效應管,O代表絕緣柵場效
發表于 11-09 15:57
?4744次閱讀
如何有效提高機器人伺服電機的過載能力?
說起對工業機器人的性能要求,無非就是“快、準、狠”三字。其實這也就是對機器人關節伺服電機的要求,今天我們就來拆解一下這三字背后的含義。
發表于 10-24 15:17
?3893次閱讀
電流互感器的型號表示及作用
—穿墻式;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
評論