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

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

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

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

C預(yù)處理器只不過(guò)是一個(gè)文本替換工具而已

電子工程師 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-11-08 14:41 ? 次閱讀

C 預(yù)處理器不是編譯器的組成部分,但是它是編譯過(guò)程中一個(gè)單獨(dú)的步驟。簡(jiǎn)言之,C預(yù)處理器只不過(guò)是一個(gè)文本替換工具而已,它們會(huì)指示編譯器在實(shí)際編譯之前完成所需的預(yù)處理。我們將把 C 預(yù)處理器(C Preprocessor)簡(jiǎn)寫(xiě)為 CPP。

所有的預(yù)處理器命令都是以井號(hào)(#)開(kāi)頭。它必須是第一個(gè)非空字符,為了增強(qiáng)可讀性,預(yù)處理器指令應(yīng)從第一列開(kāi)始。下面列出了所有重要的預(yù)處理器指令:

預(yù)處理器實(shí)例

分析下面的實(shí)例來(lái)理解不同的指令。

#define MAX_ARRAY_LENGTH 20

這個(gè)指令告訴 CPP 把所有的 MAX_ARRAY_LENGTH 替換為 20。使用#define定義常量來(lái)增強(qiáng)可讀性。

#include#include"myheader.h"

這些指令告訴 CPP 從系統(tǒng)庫(kù)中獲取 stdio.h,并添加文本到當(dāng)前的源文件中。下一行告訴 CPP 從本地目錄中獲取myheader.h,并添加內(nèi)容到當(dāng)前的源文件中。

#undef FILE_SIZE#define FILE_SIZE 42

這個(gè)指令告訴 CPP 取消已定義的 FILE_SIZE,并定義它為 42。

#ifndef MESSAGE #define MESSAGE "You wish!"#endif

這個(gè)指令告訴 CPP 只有當(dāng) MESSAGE 未定義時(shí),才定義 MESSAGE。

#ifdef DEBUG /* Your debugging statements here */#endif

這個(gè)指令告訴 CPP 如果定義了 DEBUG,則執(zhí)行處理語(yǔ)句。在編譯時(shí),如果您向 gcc 編譯器傳遞了-DDEBUG開(kāi)關(guān)量,這個(gè)指令就非常有用。它定義了 DEBUG,您可以在編譯期間隨時(shí)開(kāi)啟或關(guān)閉調(diào)試。

預(yù)定義宏

ANSI C 定義了許多宏。在編程中您可以使用這些宏,但是不能直接修改這些預(yù)定義的宏。

讓我們來(lái)嘗試下面的實(shí)例:

當(dāng)上面的代碼(在文件test.c中)被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

預(yù)處理器運(yùn)算符

C 預(yù)處理器提供了下列的運(yùn)算符來(lái)幫助您創(chuàng)建宏:

宏延續(xù)運(yùn)算符(\)

一個(gè)宏通常寫(xiě)在一個(gè)單行上。但是如果宏太長(zhǎng),一個(gè)單行容納不下,則使用宏延續(xù)運(yùn)算符(\)。例如:

#define message_for(a, b) \ printf(#a " and "#b ": We love you!\n")

字符串常量化運(yùn)算符(#)

在宏定義中,當(dāng)需要把一個(gè)宏的參數(shù)轉(zhuǎn)換為字符串常量時(shí),則使用字符串常量化運(yùn)算符(#)。在宏中使用的該運(yùn)算符有一個(gè)特定的參數(shù)或參數(shù)列表。例如:

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

CaroleandDebra:We love you!

標(biāo)記粘貼運(yùn)算符(##)

宏定義內(nèi)的標(biāo)記粘貼運(yùn)算符(##)會(huì)合并兩個(gè)參數(shù)。它允許在宏定義中兩個(gè)獨(dú)立的標(biāo)記被合并為一個(gè)標(biāo)記。例如:

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

token34 =40

這是怎么發(fā)生的,因?yàn)檫@個(gè)實(shí)例會(huì)從編譯器產(chǎn)生下列的實(shí)際輸出:

printf ("token34 = %d", token34);

這個(gè)實(shí)例演示了 token##n 會(huì)連接到 token34 中,在這里,我們使用了字符串常量化運(yùn)算符(#)和標(biāo)記粘貼運(yùn)算符(##)。

defined() 運(yùn)算符

預(yù)處理器defined運(yùn)算符是用在常量表達(dá)式中的,用來(lái)確定一個(gè)標(biāo)識(shí)符是否已經(jīng)使用 #define 定義過(guò)。如果指定的標(biāo)識(shí)符已定義,則值為真(非零)。如果指定的標(biāo)識(shí)符未定義,則值為假(零)。下面的實(shí)例演示了 defined() 運(yùn)算符的用法:

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

Hereis the message:You wish!

參數(shù)化的宏

CPP 一個(gè)強(qiáng)大的功能是可以使用參數(shù)化的宏來(lái)模擬函數(shù)。例如,下面的代碼是計(jì)算一個(gè)數(shù)的平方:

int square(int x){ return x * x;}

我們可以使用宏重寫(xiě)上面的代碼,如下:

#define square(x)((x)*(x))

在使用帶有參數(shù)的宏之前,必須使用#define指令定義。參數(shù)列表是括在圓括號(hào)內(nèi),且必須緊跟在宏名稱(chēng)的后邊。宏名稱(chēng)和左圓括號(hào)之間不允許有空格。例如:

#include#define MAX(x,y)((x)>(y)?(x):(y))int main(void){ printf("Max between 20 and 10 is %d\n", MAX(10,20)); return0;}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

Max between 20and10is20

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

    關(guān)注

    1

    文章

    1618

    瀏覽量

    49052
  • 預(yù)處理器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2221

原文標(biāo)題:C語(yǔ)言中的預(yù)處理器

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python文本預(yù)處理的基本步驟,討論文本預(yù)處理過(guò)程所需要的工具

    詞性標(biāo)注旨在基于詞語(yǔ)的定義和上下文意義,為給定文本中的每個(gè)單詞(如名詞、動(dòng)詞、形容詞和其他單詞) 分配詞性。當(dāng)前有許多包含 POS 標(biāo)記工具,包括 NLTK,spaCy,TextBlob
    的頭像 發(fā)表于 01-28 09:26 ?4854次閱讀

    瀾啟第6套字典算法替換工具

    中九瀾啟方案第6套字典算法替換工具(2011-9-22更新)請(qǐng)?jiān)?b class='flag-5'>替換前面打鉤,然后將瀾起文件拖入就OK了,文件保存在同文件夾中
    發(fā)表于 09-23 13:24

    編程是種思維方式,而代碼是種表現(xiàn)形式,硬件只不過(guò)是對(duì)思維方式的物理體現(xiàn)

    編程是種思維方式,而代碼是種表現(xiàn)形式,硬件只不過(guò)是對(duì)思維方式的物理體現(xiàn)關(guān)于這句話(huà),你怎么看?
    發(fā)表于 08-25 13:18

    C語(yǔ)言之預(yù)處理

    編譯預(yù)處理器C語(yǔ)言編譯個(gè)重要組成部分。很好的利用C語(yǔ)言的
    發(fā)表于 06-03 17:23

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

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

    Post綜合后的利用率只不過(guò)是實(shí)施后的利用率?

    嗨,Post綜合后的利用率只不過(guò)是實(shí)施后的利用率......?謝謝娜文G K.
    發(fā)表于 05-12 08:57

    c語(yǔ)言預(yù)處理命令以什么開(kāi)頭

    c語(yǔ)言預(yù)處理命令以什么開(kāi)頭,目前我并沒(méi)有windows軟件編寫(xiě)經(jīng)驗(yàn),對(duì)C語(yǔ)言的應(yīng)用也僅限于各種單片機(jī)的編程,所以對(duì)預(yù)處理的理解也只限于單片機(jī)程序上。
    發(fā)表于 07-20 07:00

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

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

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

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

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

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

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

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

    預(yù)處理相關(guān)知識(shí)點(diǎn)總結(jié)

    編譯個(gè) C 程序設(shè)計(jì)很多步驟。其中第 1 個(gè)步驟被稱(chēng)為預(yù)處理階段。C
    的頭像 發(fā)表于 05-31 09:52 ?589次閱讀
    <b class='flag-5'>預(yù)處理</b>相關(guān)知識(shí)點(diǎn)總結(jié)

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

    C語(yǔ)言的預(yù)處理是在編譯之前對(duì)源代碼進(jìn)行處理的階段,它主要由預(yù)處理器完成。預(yù)處理器
    的頭像 發(fā)表于 12-08 15:40 ?585次閱讀
    <b class='flag-5'>C</b>語(yǔ)言有哪些<b class='flag-5'>預(yù)處理</b>操作?

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

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

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

    C預(yù)處理器C Pre-Processor)也常簡(jiǎn)寫(xiě)為 CPP,是個(gè)C 編譯
    的頭像 發(fā)表于 03-12 14:14 ?583次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>預(yù)處理器</b>及其工作原理