精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

C語言預處理指令及分類

strongerHuang ? 來源:嵌入式專欄 ? 作者:strongerHuang ? 2020-11-29 10:14 ? 次閱讀

C語言編程過程中,經常會用到如 #include、#define 等指令,這些標識開頭的指令被稱為預處理指令,預處理指令由預處理程序(預處理器)操作。

相比其他編程語言,C/C++ 語言更依賴預處理器,故在閱讀或開發 C/C++ 程序過程中,可能會接觸大量的預處理指令。

1

預處理指令及分類C/C++ 程序中的源代碼中包含以 # 開頭的各種編譯指令,這些指令稱為預處理指令。預處理指令不屬于 C/C++ 語言的語法,但在一定意義上可以說預處理擴展了 C/C++。

ANSI C 定義的預處理指令主要包括:文件包含、宏定義、條件編譯和特殊控制等 4 類。

1. 文件包含

文件包含:#include 是 C 程序設計中最常用的預處理指令。例如,幾乎每個需要輸入輸出的 C 程序,都要包含 #include《stdio.h》 指令,表示把 stdio.h 文件中的全部內容,替換該行指令。

包含文件的格式有 #include 后面跟尖括號 《》 和雙引號 “” 之分。兩者的主要差別是搜索路徑的不同。

尖括號形式:如 #include《math.h》,預處理器直接到系統目錄對應文件中搜索 math.h 文件,搜索不到則報錯。系統提供的頭文件一般采用該包含方式,而自定義的頭文件不能采用該方式。

雙引號形式:如 #include“cal.h”,首先到當前工作目錄下查找該文件,如果沒有找到,再到系統目錄下查找。包含自定義的頭文件,一般采用該方式。雖然系統頭文件采用此方式也正確,但浪費了不必要的搜索時間,故系統頭文件不建議采用該包含方式。

2.宏定義

宏定義:包括定義宏 #define 和宏刪除 #undef。

以 #define 開頭,可以定義無參數宏和帶參的宏定義。程序中經常使用無參宏定義來定義符號常量。例如:

#define PI 3.1416 //定義無符號宏,或定義符號常量 PI

#undef 表示刪除已定義的宏,例如:

#undef PI //刪除前面該宏的定義

3.條件編譯

條件編譯:主要是為了有選擇性地執行相應操作,防止宏替換內容(如文件等)的重復包含。

常見的條件編譯指令有 #if、#elif、#else、#endif、#ifdef、#ifndef。

4.特殊控制

特殊控制:ANSI C 還定義了特殊作用的預處理指令,如 #error、#pragma。

#error:使預處理器輸出指定的錯誤信息,通常用于調試程序。

#pragma:是功能比較豐富且靈活的指令,可以有不同的參數選擇,從而完成相應的特 定功能操作。調用格式為:#pragma 參數。

其中,參數可以有 message 類型、code_seg、once、warning、pack 等。通常使用如下的預處理指令來設定內存以 n 字節對齊方式。

#pragma pack (n) //其中 n 稱為對齊系數,取 1、2、4、8.。.

2

預處理器及其工作原理

C預處理器(C Pre-Processor)也常簡寫為 CPP,是一個與 C 編譯器獨立的小程序,預編譯器并不理解 C 語言語法,它僅是在程序源文件被編譯之前,實現文本替換的功能。

目前預編譯器巳集成到集成開發環境中,一般并沒有執行預處理操作的選項,而包含在了編譯操作中,即選擇編譯操作時,首先調用的是預處理器,處理源程序文件中的預處理指令,預處理器的輸出再送給編譯器,編譯器從 C 語言語法角度檢查程序是否正確,如果正確,則生成目標代碼文件或機器指令文件。

C 預處理器及 C 編譯器的執行順序及輸入輸出文件類型,如圖所示:

責任編輯:lq

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

    關注

    180

    文章

    7575

    瀏覽量

    134008
  • C++
    C++
    +關注

    關注

    21

    文章

    2085

    瀏覽量

    73300
  • 預處理
    +關注

    關注

    0

    文章

    32

    瀏覽量

    10454

原文標題:C語言預處理命令分類和工作原理

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C55x CSL音頻預處理

    電子發燒友網站提供《C55x CSL音頻預處理.pdf》資料免費下載
    發表于 09-19 11:30 ?0次下載
    <b class='flag-5'>C</b>55x CSL音頻<b class='flag-5'>預處理</b>

    圖像識別技術包括自然語言處理

    計算機視覺技術對圖像進行處理、分析和理解,從而實現對圖像中的目標、場景、行為等信息的識別和理解。圖像識別技術包括圖像預處理、特征提取、分類器設計、模型訓練等多個環節。 1.2 自然語言
    的頭像 發表于 07-16 10:54 ?388次閱讀

    nlp自然語言處理模型怎么做

    自然語言處理(Natural Language Processing,簡稱NLP)是人工智能領域的一個重要分支,它涉及到計算機對人類語言的理解和生成。隨著深度學習技術的發展,NLP領域取得了顯著
    的頭像 發表于 07-05 09:59 ?350次閱讀

    信號的預處理包括哪些環節

    信號預處理是信號處理的一個重要環節,它對信號進行一系列的操作,以便于后續的分析和處理。信號預處理的目的是提高信號的質量,減少噪聲,保留有用的信息,以及滿足后續
    的頭像 發表于 06-03 10:35 ?1280次閱讀

    C預處理器及其工作原理

    C預處理器(C Pre-Processor)也常簡寫為 CPP,是一個與 C 編譯器獨立的小程序,預編譯器并不理解 C
    的頭像 發表于 03-12 14:14 ?480次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>預處理</b>器及其工作原理

    C語言#define的應用

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

    C語言中的預處理

    所有的預處理器命令都是以井號(#)開頭。它必須是第一個非空字符,為了增強可讀性,預處理指令應從第一列開始。
    發表于 03-01 12:16 ?661次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的<b class='flag-5'>預處理</b>器

    C語言中的頭文件

    #include 指令會指示 C 預處理器瀏覽指定的文件作為輸入。預處理器的輸出包含了已經生成的輸出,被引用文件生成的輸出以及 #include
    發表于 02-23 14:06 ?339次閱讀

    C語言-#和##的具體用法

    C語言中,在宏里面使用’#’和’##’有它非常神奇的作用。在宏定義的替換的過程中,#號可以作為一個預處理運算符,把宏參數轉換為字符串。##運算符則可以把兩個宏參數組合在一起。下面就來說說具體的用法。
    的頭像 發表于 12-19 12:54 ?3291次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>-#和##的具體用法

    C語言有哪些預處理操作?

    C語言預處理是在編譯之前對源代碼進行處理的階段,它主要由預處理器完成。預處理器是一個獨立的程序
    的頭像 發表于 12-08 15:40 ?471次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>有哪些<b class='flag-5'>預處理</b>操作?

    C語言必備知識編譯預處理

    編譯預處理就是在編譯源代碼之前進行的一系列處理,將源程序中的一些特殊命令進行展開或處理,生成擴展的源代碼。這些特殊命令通常以“#”開頭,占單獨的行,語句尾部不需要加分號。
    的頭像 發表于 12-01 18:27 ?951次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>必備知識編譯<b class='flag-5'>預處理</b>

    為什么C語言要進行編譯

    時主要分為了4個階段,每個階段的具體作用將在接下來進行介紹。 注:預處理中的cpp不是 c plus plus,而是c pre-process Part1預處理 命令:gcc -E h
    的頭像 發表于 11-24 15:47 ?941次閱讀
    為什么<b class='flag-5'>C</b><b class='flag-5'>語言</b>要進行編譯

    javascript的成熟分類

    JavaScript的成熟分類可以從多個角度進行劃分,以下是幾種常見的分類方式: 語言成熟度: 解釋型語言:JavaScript是一種解釋型語言
    的頭像 發表于 11-16 10:30 ?30.2w次閱讀

    請問C語言文件中的預處理操作符#和##各有什么作用?

    C語言文件中的預處理操作符#和##各有什么作用?
    發表于 11-06 08:09

    C語言宏定義講解

    近日在某一技術群又水群時某一群友將這個稱之為“常量”,事實上在C語言中#define 正確的叫法叫做“宏定義”屬于預處理指令中的一種,在C
    發表于 10-01 13:28 ?579次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>宏定義講解