最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【C/C++】美元能做英鎊卻做不了的事 - 在標(biāo)識(shí)符中使用通用字符

2023-03-22 17:24 作者:冒-_-泡  | 我要投稿

下面這段代碼:

這里我們使用符號(hào)“$”作為變量名,熟悉C++的同學(xué)知道,“$”可作為標(biāo)識(shí)符是后面標(biāo)準(zhǔn)加上的事情,不過(guò)在此之前已經(jīng)有很多編譯器內(nèi)部支持了,例如gcc的選項(xiàng):

試試把變量名換成英鎊:

編譯報(bào)錯(cuò):

很多資料會(huì)說(shuō),標(biāo)識(shí)符只能是字母下劃線開(kāi)頭,后面跟字母下劃線數(shù)字,當(dāng)然上面我們知道C++里面“$”被擴(kuò)展進(jìn)來(lái),按這個(gè)說(shuō)法其他字符當(dāng)然不行

然而換成用漢字和圖畫(huà)符號(hào)試試看:

那么這是編譯器的implementation defined嗎?就這個(gè)例子來(lái)說(shuō),部分是,部分不是

從標(biāo)識(shí)符的語(yǔ)法定義來(lái)說(shuō),至少在C99和C++11起,就允許使用通用字符集(就理解為unicode字符集)的部分字符,所以上面用“貓”和“??”都是標(biāo)準(zhǔn)認(rèn)定合法的

但是,允許使用這些字符不代表代碼里面一定可以出現(xiàn)這些字符,因?yàn)殛P(guān)于代碼的組織形式,還規(guī)定了基礎(chǔ)源字符集,共96個(gè):

就是說(shuō),如果編譯器自己不做擴(kuò)展的話,原則上一個(gè)代碼文件只能用這96個(gè)字符進(jìn)行書(shū)寫(xiě),那既然還規(guī)定了標(biāo)識(shí)符可以用部分unicode字符,若要用,該怎么書(shū)寫(xiě)呢?

答案是用轉(zhuǎn)義:

轉(zhuǎn)義用“\uHHHH”或“\UHHHHHHHH”的形式,十六進(jìn)制不區(qū)分大小寫(xiě),直接書(shū)寫(xiě)在代碼的對(duì)應(yīng)位置即可,當(dāng)然,我這里的gcc是支持直接書(shū)寫(xiě)通用字符的,所以在上面代碼中可以轉(zhuǎn)義或原始字符混用,即“\u732B”、“\U0000732b”和“貓”三種寫(xiě)法都是通用的,在編譯器看來(lái)沒(méi)有區(qū)別

實(shí)際上這里用“編譯器”并非很?chē)?yán)謹(jǐn),因?yàn)閺囊?guī)范來(lái)說(shuō),通用字符的處理是在編譯之前,甚至是在預(yù)處理之前,在讀入源碼文件后就先進(jìn)行了

可以只調(diào)用預(yù)處理器,輸出一下對(duì)上面代碼的預(yù)處理結(jié)果(main函數(shù)部分):

可以看到,在正式編譯之前,字符就已經(jīng)被處理了,gcc的辦法是統(tǒng)一轉(zhuǎn)成8位16進(jìn)制的\U形式,而clang對(duì)于漢字則原樣保留,對(duì)于0xFFFF以上的unicode則使用\U形式

因此,有人說(shuō)\u和\U轉(zhuǎn)義是字符串中的轉(zhuǎn)義字符,這并不正確,處理它們的時(shí)候還沒(méi)字符串什么事情,上面的示例代碼也和字符串毫無(wú)關(guān)系,而事實(shí)上字符串的轉(zhuǎn)義序列定義也沒(méi)有提到\u和\U

一般的資料會(huì)說(shuō),C和C++的編譯過(guò)程是先預(yù)處理再編譯,但在這兩者之外,編譯器還是有一些事情需要進(jìn)行,整個(gè)步驟統(tǒng)稱(chēng)“翻譯階段”,其中涉及到語(yǔ)法和代碼處理的不少細(xì)節(jié),后續(xù)我們會(huì)繼續(xù)分享其中的一些問(wèn)題

回到開(kāi)頭的問(wèn)題,英鎊符號(hào)也是一個(gè)unicode字符,但為何就報(bào)錯(cuò)了呢?因?yàn)椴⒎撬衭nicode字符都可以用來(lái)組成標(biāo)識(shí)符,英鎊恰巧就被排除在外了

附C++11中定義的可以用來(lái)做標(biāo)識(shí)符的字符范圍:

常用漢字的范圍是4E00-9FA5,可安全使用

沒(méi)用的知識(shí)又增加了~~~

【C/C++】美元能做英鎊卻做不了的事 - 在標(biāo)識(shí)符中使用通用字符的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
丰宁| 南漳县| 肇源县| 鄢陵县| 将乐县| 万源市| 冕宁县| 崇文区| 元氏县| 大余县| 静宁县| 灵寿县| 界首市| 咸宁市| 枣强县| 阿城市| 遵义县| 铁岭县| 淳安县| 兴城市| 克山县| 沅陵县| 新疆| 福泉市| 含山县| 法库县| 镇沅| 昌平区| 通州区| 长宁区| 金山区| 聂荣县| 英超| 隆昌县| 鱼台县| 四子王旗| 察隅县| 秦皇岛市| 连江县| 景泰县| 滕州市|