衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

某軟件工程師接盤了前同事的項目,進度一拖再拖,最后發現問題出現在如下代碼:

// 注釋語句 ??/2a = 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編譯器不處理“三字母詞”,會將它們當做普通的字符串來處理。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137734
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69058

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

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    EE-62:在C語言中訪問短內存

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

    EE-128:C語言中的DSP:從C調用匯編類成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編類成員函數.pdf》資料免費下載
    發表于 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>調用匯編類成員函數

    C語言中申請的堆內存能不能自動釋放

    C語言中申請的堆內存能不能自動釋放?每次都要手動 free 太麻煩,也容易忘記。 學過 C++ 的同學,應該首先能想到智能指針。 但是這是C語言
    的頭像 發表于 11-27 09:33 ?168次閱讀

    C語言關鍵分別發生在哪個階段

    在編譯的第一個階段:預處理,對一些宏定義做替換。 第二個,const。 C語言中的 const 用于修飾只讀變量,表示變量本身不能修改。 這個關鍵會在編譯的第二步起作用,也就是編譯。強行修改一個只讀變量,編譯就會提示問題。 第
    的頭像 發表于 11-24 10:31 ?235次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?473次閱讀

    C語言關鍵--typedef

    C語言關鍵使用方法學習指南!
    的頭像 發表于 10-07 12:44 ?344次閱讀

    c語言中從左到右結合怎么看

    C語言中,操作符的結合性(Associativity)是指當操作符在表達式中連續出現時,它們如何與操作數結合的順序。對于大多數二元操作符(即需要兩個操作數的操作符),C語言遵循兩種基
    的頭像 發表于 08-20 11:42 ?1042次閱讀

    快速掌握C語言關鍵

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

    一文了解場效應極管型號規則及參數含義

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

    嵌入式系統中C語言結構體的基礎實現與應用

    C語言中的數組只能允許程序員定義存儲相同類型數據。但是結構是C語言編程中允許您存儲不同數據類型的數據。
    發表于 03-12 14:29 ?560次閱讀
    嵌入式系統中<b class='flag-5'>C</b><b class='flag-5'>語言</b>結構體的基礎實現與應用

    C語言中的typedef的應用

    C 語言提供了 typedef 關鍵,您可以使用它來為類型取一個新的名字。下面的實例為單字節數字定義了一個術語 BYTE。
    發表于 03-06 11:34 ?431次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>的typedef的應用

    C語言#define的應用

    C/C++ 編程語言中,當程序被編譯時,被發送到編譯器,編譯器將程序轉換為機器語言,然后完成編譯并執行該程序。預處理器也稱為宏預處理器。
    發表于 03-06 11:29 ?426次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應用

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

    C語言是一種低級的、靜態的、結構化的編程語言,它沒有提供像C++或Java等高級語言中的異常處理機制,例如try-catch-finally
    的頭像 發表于 02-28 14:25 ?677次閱讀

    C語言中的可變參數介紹

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

    C語言中的錯誤處理機制解析

    C 語言不提供對錯誤處理的直接支持,但是作為一種系統編程語言,它以返回值的形式允許您訪問底層數據。
    的頭像 發表于 02-26 11:19 ?564次閱讀
    澳门百家乐论坛| 百家乐官网视频对对碰| 百家乐官网和局投注法| 单机百家乐破解方法| 澳门百家乐官网打缆| 百家乐澳门百家乐澳门赌场| 裕民县| 百家乐终端下载| 顶旺亚洲| 进贤县| 澳门百家乐游戏说明书| 百家乐官网庄闲比率| 百家乐大钱赢小钱| 百家乐官网概率下注法| 大丰收百家乐的玩法技巧和规则| 澳门百家乐官网赢钱秘| 海南太阳城大酒店| 马尼拉百家乐官网的玩法技巧和规则| 大发888开户博盈国际| 百家乐官网网哪一家做的最好呀| 京城国际娱乐城| 赙彩百家乐游戏规则| 百家乐官网高手和勒威| 362百家乐的玩法技巧和规则 | 水果机下载| 百家乐官网博娱乐网赌百家乐官网的玩法技巧和规则 | 电投百家乐网站| 7人百家乐官网桌子| 水果机下载| 百家乐买隔一数| 解析百家乐官网投注法| 百家乐如何赚洗码| 乐享百家乐官网的玩法技巧和规则| 百家博娱乐城| 蓝盾百家乐代理| 网络百家乐官网打揽| 二八杠生死门| 百家乐大转轮真人视讯| 百家乐怎么对冲打| SHOW| 澳门百家乐官网会出老千吗 |