0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

Q4MP_gh_c472c21 ? 來源:CSDN ? 作者:CSDN ? 2021-09-26 14:46 ? 次閱讀

某軟件工程師接盤了前同事的項(xiàng)目,進(jìn)度一拖再拖,最后發(fā)現(xiàn)問題出現(xiàn)在如下代碼:

// 注釋語句 ??/2a = b+c;

請(qǐng)注意代碼中的“??/”,就是這注釋隱藏的很深,讓項(xiàng)目一拖再拖。

“??/”會(huì)被編譯器當(dāng)作 /,變成C語言的換行符(多行代碼連接符)。于是這段代碼等同于// 注釋語句 a = b+c ;就會(huì)被注釋掉。

下面我們就是說說“??/”這種“三字母詞”的內(nèi)容。

什么是“三字母詞”

在ANSI標(biāo)準(zhǔn)中,定義了“三字母詞”,或者成為“三聯(lián)符序列”,英文為“trigraph sequences”。目的主要是為了在一些特定的字符集中,比如一些七位代碼集中,解決一些特定字符的輸入問題。

也許是由于這些字符集我們基本上用不到,所以在大多數(shù)C語言的書籍中,我們都看不到對(duì)“三字母詞”的講解。這里資料來源于參考ANSI C99標(biāo)準(zhǔn)(即傳說中的《American National Standards Institute for Programming Languages-C》 1999年,我們習(xí)慣簡稱為“C99”)。

“三字母詞”主要有9個(gè),分別為:三字母詞對(duì)應(yīng)的字符

??=#

??([

??)]

??《{

??》}

??//

??!|

??‘^

??-~

源代碼中的“三字母詞”,在編譯階段會(huì)被替換為“對(duì)應(yīng)的字符”。對(duì)于以“?”開頭的字符序列,如果不能與上面9個(gè)匹配,編譯器將保持原狀;一旦匹配,編譯器就會(huì)做替換。

“三字母詞”例子

例子1:C99標(biāo)準(zhǔn)中給出的例子

printf(“Eh???/n”);

相當(dāng)于:

printf(“Eh/n”);

例子2:一個(gè)我們?nèi)菀追傅腻e(cuò)誤(摘自《Pointers On C》)

printf(“Delete file (are you really sure??):”);

運(yùn)行結(jié)果為(三字母詞“??)”編譯時(shí)替換為“]”):

Delete file (are you really sure]:

而不是我們想象中的:

Delete file (are you really sure??):

最后

由于編譯器的種類各樣,對(duì)ANSI C的支持也不一樣,所以可能會(huì)有些C編譯器不處理“三字母詞”,會(huì)將它們當(dāng)做普通的字符串來處理。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137317
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4814

    瀏覽量

    68849

原文標(biāo)題:C語言中的“三字母詞”坑了工程師

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EE-62:在C語言中訪問短內(nèi)存

    電子發(fā)燒友網(wǎng)站提供《EE-62:在C語言中訪問短內(nèi)存.pdf》資料免費(fèi)下載
    發(fā)表于 01-07 14:02 ?0次下載
    EE-62:在<b class='flag-5'>C</b><b class='flag-5'>語言中</b>訪問短<b class='flag-5'>字</b>內(nèi)存

    EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語言中的DSP:從C調(diào)用匯編類成員函數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言中</b>的DSP:從<b class='flag-5'>C</b>調(diào)用匯編類成員函數(shù)

    C語言中申請(qǐng)的堆內(nèi)存能不能自動(dòng)釋放

    C語言中申請(qǐng)的堆內(nèi)存能不能自動(dòng)釋放?每次都要手動(dòng) free 太麻煩,也容易忘記。 學(xué)過 C++ 的同學(xué),應(yīng)該首先能想到智能指針。 但是這是C語言
    的頭像 發(fā)表于 11-27 09:33 ?155次閱讀

    C語言關(guān)鍵分別發(fā)生在哪個(gè)階段

    在編譯的第一個(gè)階段:預(yù)處理,對(duì)一些宏定義做替換。 第二個(gè),const。 C語言中的 const 用于修飾只讀變量,表示變量本身不能修改。 這個(gè)關(guān)鍵會(huì)在編譯的第二步起作用,也就是編譯。強(qiáng)行修改一個(gè)只讀變量,編譯就會(huì)提示問題。 第
    的頭像 發(fā)表于 11-24 10:31 ?214次閱讀

    C語言中的socket編程基礎(chǔ)

    Socket編程簡介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?398次閱讀

    C語言關(guān)鍵--typedef

    C語言關(guān)鍵使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?315次閱讀

    c語言中從左到右結(jié)合怎么看

    C語言中,操作符的結(jié)合性(Associativity)是指當(dāng)操作符在表達(dá)式中連續(xù)出現(xiàn)時(shí),它們?nèi)绾闻c操作數(shù)結(jié)合的順序。對(duì)于大多數(shù)二元操作符(即需要兩個(gè)操作數(shù)的操作符),C語言遵循兩種基
    的頭像 發(fā)表于 08-20 11:42 ?1006次閱讀

    快速掌握C語言關(guān)鍵

    C語言中的32個(gè)關(guān)鍵你知道多少個(gè)呢?根據(jù)關(guān)鍵的作用分為四類:數(shù)據(jù)類型關(guān)鍵、控制語句關(guān)鍵、
    的頭像 發(fā)表于 07-06 08:04 ?390次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b>關(guān)鍵<b class='flag-5'>字</b>

    一文了解場效應(yīng)極管型號(hào)規(guī)則及參數(shù)含義

    場效應(yīng)極管管現(xiàn)行有兩種命名方法。第一種命名方法,型號(hào)的第字母J代表結(jié)型場效應(yīng)管,O代表絕緣柵場效應(yīng)管。第二位字母代表材料,D是P型硅,反型層是N溝道;
    的頭像 發(fā)表于 04-23 10:40 ?2266次閱讀
    一文了解場效應(yīng)<b class='flag-5'>三</b>極管型號(hào)規(guī)則及參數(shù)含義

    嵌入式系統(tǒng)中C語言結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用

    C語言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類型數(shù)據(jù)。但是結(jié)構(gòu)是C語言編程中允許您存儲(chǔ)不同數(shù)據(jù)類型的數(shù)據(jù)。
    發(fā)表于 03-12 14:29 ?535次閱讀
    嵌入式系統(tǒng)中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結(jié)構(gòu)體的基礎(chǔ)實(shí)現(xiàn)與應(yīng)用

    C語言中的typedef的應(yīng)用

    C 語言提供了 typedef 關(guān)鍵,您可以使用它來為類型取一個(gè)新的名字。下面的實(shí)例為單字節(jié)數(shù)字定義了一個(gè)術(shù)語 BYTE。
    發(fā)表于 03-06 11:34 ?426次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的應(yīng)用

    C語言#define的應(yīng)用

    C/C++ 編程語言中,當(dāng)程序被編譯時(shí),被發(fā)送到編譯器,編譯器將程序轉(zhuǎn)換為機(jī)器語言,然后完成編譯并執(zhí)行該程序。預(yù)處理器也稱為宏預(yù)處理器。
    發(fā)表于 03-06 11:29 ?414次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應(yīng)用

    介紹C語言中錯(cuò)誤處理和異常處理的一些常用的方法和策略

    C語言是一種低級(jí)的、靜態(tài)的、結(jié)構(gòu)化的編程語言,它沒有提供像C++或Java等高級(jí)語言中的異常處理機(jī)制,例如try-catch-finally
    的頭像 發(fā)表于 02-28 14:25 ?654次閱讀

    C語言中的可變參數(shù)介紹

    C 語言為這種情況提供了一個(gè)解決方案,它允許您定義一個(gè)函數(shù),能根據(jù)具體的需求接受可變數(shù)量的參數(shù)
    發(fā)表于 02-28 14:00 ?345次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的可變參數(shù)介紹

    vb語言c++語言的區(qū)別

    Microsoft開發(fā)的一種面向?qū)ο蟮氖录?qū)動(dòng)編程語言。它的設(shè)計(jì)目標(biāo)是簡化編程過程,讓初學(xué)者也能快速上手。與之相比,C++語言是一種通用的、面向?qū)ο蟮木幊?b class='flag-5'>語言,其設(shè)計(jì)目標(biāo)是提供高性能的
    的頭像 發(fā)表于 02-01 10:20 ?2439次閱讀