国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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ó)家法律
舒城县| 元朗区| 宁乡县| 张掖市| 靖边县| 精河县| 宜宾县| 南康市| 盐池县| 花垣县| 临江市| 连山| 孟津县| 宁陕县| 夏邑县| 襄汾县| 蒙自县| 九江市| 平江县| 秦皇岛市| 加查县| 婺源县| 沙湾县| 上栗县| 临朐县| 常宁市| 垣曲县| 滨州市| 陇南市| 密山市| 正阳县| 措美县| 天全县| 旅游| 永安市| 惠东县| 广饶县| 和平县| 富宁县| 监利县| 仁寿县|