“?? ”這三個字元把軟體工程師坑慘了
某軟體工程師接盤了前同事的專案,進度一拖再拖,最後發現問題出現在如下程式碼:
請注意程式碼中的“
??/
”,就是這注釋隱藏的很深,讓專案一拖再拖。
“??/”會被編譯器當作 /,變成C語言的換行符(多行程式碼連線符)。於是這段程式碼等同於// 註釋語句 a = b+c ;就會被註釋掉。
下面我們就是說說“
??/
”這種“三字母詞”的內容。
什麼是“三字母詞”
在ANSI標準中,定義了“三字母詞”,或者成為“三聯符序列”,英文為“trigraph sequences”。
目的主要是為了在一些特定的字符集中,比如一些七位程式碼集中,解決一些特定字元的輸入問題
。
也許是由於這些字符集我們基本上用不到,所以在大多數C語言的書籍中,我們都看不到對“三字母詞”的講解。這裡資料來源於參考ANSI C99標準(即傳說中的《American National Standards Institute for Programming Languages-C》 1999年,我們習慣簡稱為“C99”)。
“三字母詞”主要有9個,分別為:
原始碼中的“三字母詞”,在編譯階段會被替換為“對應的字元”。對於以“?”開頭的字元序列,如果不能與上面9個匹配,編譯器將保持原狀;一旦匹配,編譯器就會做替換。
“三字母詞”例子
例子1:C99標準中給出的例子
相當於:
例子2:一個我們容易犯的錯誤(摘自《Pointers On C》)
執行結果為(三字母詞“??)”編譯時替換為“]”):
而不是我們想象中的:
最後
由於編譯器的種類各樣,對ANSI C的支援也不一樣,所以可能會有些C編譯器不處理“三字母詞”,會將它們當做普通的字串來處理。
微控制器下載檔案:HEX檔案和BIN檔案的區別
作死系列:老外把眼睛當電阻,能阻擋多大電流?
微控制器的串列埠通訊,簡單明瞭好理解
相關文章
- 2021-09-25有趣的18個冷知識:為什麼駱駝生吞仙人掌,不會感到扎嘴
- 2021-09-02名記曝倫納德曾看不起詹姆斯, 卻被字母哥打臉, 一番言論讓他尷尬
- 2021-06-03初學者如何快速學習程式語言?
- 2021-05-18你會如何確定自己“活著”, 而不是處於虛擬世界? 大腦: 僅憑一巴掌?
- 2021-04-26年後跳槽,你準備好在程式設計面試中一舉拿下高薪了嗎?