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

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

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

C預(yù)處理器及其工作原理

strongerHuang ? 來源:嵌入式專欄 ? 2024-03-12 14:14 ? 次閱讀

C語言編程過程中,經(jīng)常會用到如 #include、#define 等指令,這些標(biāo)識開頭的指令被稱為預(yù)處理指令,預(yù)處理指令由預(yù)處理程序(預(yù)處理器)操作。 相比其他編程語言,C/C++ 語言更依賴預(yù)處理器,故在閱讀或開發(fā) C/C++ 程序過程中,可能會接觸大量的預(yù)處理指令。

預(yù)處理指令及分類

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

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

1. 文件包含 文件包含:#include 是 C 程序設(shè)計中最常用的預(yù)處理指令。例如,幾乎每個需要輸入輸出的 C 程序,都要包含 #include 指令,表示把 stdio.h 文件中的全部內(nèi)容,替換該行指令。 包含文件的格式有 #include 后面跟尖括號 <> 和雙引號 "" 之分。兩者的主要差別是搜索路徑的不同。 尖括號形式:如 #include,預(yù)處理器直接到系統(tǒng)目錄對應(yīng)文件中搜索 math.h 文件,搜索不到則報錯。系統(tǒng)提供的頭文件一般采用該包含方式,而自定義的頭文件不能采用該方式。 雙引號形式:如 #include"cal.h",首先到當(dāng)前工作目錄下查找該文件,如果沒有找到,再到系統(tǒng)目錄下查找。包含自定義的頭文件,一般采用該方式。雖然系統(tǒng)頭文件采用此方式也正確,但浪費了不必要的搜索時間,故系統(tǒng)頭文件不建議采用該包含方式。

2.宏定義 宏定義:包括定義宏 #define 和宏刪除 #undef。 以 #define 開頭,可以定義無參數(shù)宏和帶參的宏定義。程序中經(jīng)常使用無參宏定義來定義符號常量。例如:

#define PI 3.1416 //定義無符號宏,或定義符號常量 PI
#undef 表示刪除已定義的宏,例如:
#undef PI //刪除前面該宏的定義

3.條件編譯

條件編譯:主要是為了有選擇性地執(zhí)行相應(yīng)操作,防止宏替換內(nèi)容(如文件等)的重復(fù)包含。 常見的條件編譯指令有 #if、#elif、#else、#endif、#ifdef、#ifndef。

4.特殊控制 特殊控制:ANSI C 還定義了特殊作用的預(yù)處理指令,如 #error、#pragma。 #error:使預(yù)處理器輸出指定的錯誤信息,通常用于調(diào)試程序。 #pragma:是功能比較豐富且靈活的指令,可以有不同的參數(shù)選擇,從而完成相應(yīng)的特 定功能操作。調(diào)用格式為:#pragma 參數(shù)。 其中,參數(shù)可以有 message 類型、code_seg、once、warning、pack 等。通常使用如下的預(yù)處理指令來設(shè)定內(nèi)存以 n 字節(jié)對齊方式。 #pragma pack (n) //其中 n 稱為對齊系數(shù),取 1、2、4、8...

預(yù)處理器及其工作原理

C預(yù)處理器(C Pre-Processor)也常簡寫為 CPP,是一個與 C 編譯器獨立的小程序,預(yù)編譯器并不理解 C 語言語法,它僅是在程序源文件被編譯之前,實現(xiàn)文本替換的功能。 目前預(yù)編譯器巳集成到集成開發(fā)環(huán)境中,一般并沒有執(zhí)行預(yù)處理操作的選項,而包含在了編譯操作中,即選擇編譯操作時,首先調(diào)用的是預(yù)處理器,處理源程序文件中的預(yù)處理指令,預(yù)處理器的輸出再送給編譯器,編譯器從 C 語言語法角度檢查程序是否正確,如果正確,則生成目標(biāo)代碼文件或機(jī)器指令文件。 C 預(yù)處理器及 C 編譯器的執(zhí)行順序及輸入輸出文件類型,如圖所示: 4b61ff18-df43-11ee-a297-92fbcf53809c.jpg

審核編輯:黃飛

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

    關(guān)注

    68

    文章

    19286

    瀏覽量

    229853
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136841
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1945

    瀏覽量

    34740
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49133

原文標(biāo)題:C語言預(yù)處理命令分類和工作原理

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    預(yù)處理器在Build Settings中定義錯誤

    :“編譯”和“正確的語法中的預(yù)處理器定義”(TestValay= 1)(見屏幕截圖2)PSoC Creator把定義定義為“1=”而不是“1”。所以代碼沒有顯示正確,格雷碼確實是編譯的!編譯
    發(fā)表于 02-22 06:25

    E2411C和E5344A Intel ***預(yù)處理器接口

    E2411C和E5344A Intel ***預(yù)處理器接口
    發(fā)表于 03-05 10:40

    E2434系列Intel 80C186和80C188系列預(yù)處理器接口

    E2434系列Intel 80C186和80C188系列預(yù)處理器接口
    發(fā)表于 03-11 17:37

    E2413C Motorola ***預(yù)處理器接口

    E2413C Motorola ***預(yù)處理器接口
    發(fā)表于 03-14 20:20

    C語言的編譯預(yù)處理

    在將一個C源程序轉(zhuǎn)換為可執(zhí)行程序的過程中, 編譯預(yù)處理是最初的步驟. 這一步驟是由預(yù)處理器(preprocessor)來完成的. 在源流程序被編譯
    發(fā)表于 09-20 18:17 ?47次下載

    處理器工作原理

    處理器工作原理1. 引言 2. 微處理器的結(jié)構(gòu)
    發(fā)表于 08-05 10:49 ?6727次閱讀

    預(yù)處理器工作原理作用

    預(yù)處理器工作原理作用,希望對學(xué)者們有幫助。
    發(fā)表于 10-29 11:40 ?0次下載

    基于FPGA的傳像光纖束圖像預(yù)處理器

    基于FPGA的傳像光纖束圖像預(yù)處理器,下來看看
    發(fā)表于 08-30 15:10 ?12次下載

    靜電水處理器工作原理和特點

    靜電水處理器是一種水處理器,安裝簡單,具有除垢和殺菌,運行可靠等功能。因此,受到了廣大企業(yè)用戶的青睞,廣泛使用在工業(yè)循環(huán)水系統(tǒng)、冷卻水和鍋爐給水系統(tǒng)當(dāng)中。那么這種靜電水處理器工作原理
    發(fā)表于 05-28 09:11 ?2745次閱讀

    C語言預(yù)處理命令的分類和工作原理詳細(xì)說明

    C 語言編程過程中,經(jīng)常會用到如 #include、#define 等指令,這些標(biāo)識開頭的指令被稱為預(yù)處理指令,預(yù)處理指令由預(yù)處理程序(預(yù)處理器
    發(fā)表于 11-25 10:34 ?18次下載
    <b class='flag-5'>C</b>語言<b class='flag-5'>預(yù)處理</b>命令的分類和<b class='flag-5'>工作原理</b>詳細(xì)說明

    嵌入式C預(yù)處理器的基本概念和常用指令

    在嵌入式系統(tǒng)開發(fā)中,C預(yù)處理器是非常重要的一部分,可以在編譯之前對源代碼進(jìn)行宏替換、條件編譯和包含等處理。在本文中,我們將介紹嵌入式C預(yù)處理器
    的頭像 發(fā)表于 04-13 16:11 ?929次閱讀

    C/C++預(yù)處理命令的工作原理及分類

    摘要:在C/C++語言編程過程中,經(jīng)常會用到如#include、#define等指令,同時也會涉及到大量的預(yù)處理與條件編譯,這樣做的好處可以使代碼更利于移植移植性,也讓代碼易于修改。因此引入了
    的頭像 發(fā)表于 04-15 11:32 ?936次閱讀

    介紹嵌入式C預(yù)處理器的基本概念和常用指令

    在嵌入式系統(tǒng)開發(fā)中,C預(yù)處理器是非常重要的一部分,可以在編譯之前對源代碼進(jìn)行宏替換、條件編譯和包含等處理。
    發(fā)表于 05-20 15:14 ?496次閱讀

    C語言有哪些預(yù)處理操作?

    C語言的預(yù)處理是在編譯之前對源代碼進(jìn)行處理的階段,它主要由預(yù)處理器完成。預(yù)處理器是一個獨立的程序,它負(fù)責(zé)對源代碼進(jìn)行一些文本替換和
    的頭像 發(fā)表于 12-08 15:40 ?619次閱讀
    <b class='flag-5'>C</b>語言有哪些<b class='flag-5'>預(yù)處理</b>操作?

    C語言中的預(yù)處理器

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