在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

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

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

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

#define MAX_ARRAY_LENGTH 20

這個(gè)指令告訴 CPP 把所有的 MAX_ARRAY_LENGTH 替換為 20。使用#define定義常量來增強(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開關(guān)量,這個(gè)指令就非常有用。它定義了 DEBUG,您可以在編譯期間隨時(shí)開啟或關(guān)閉調(diào)試。

預(yù)定義宏

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

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

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

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

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

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

一個(gè)宏通常寫在一個(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á)式中的,用來確定一個(gè)標(biāo)識(shí)符是否已經(jīng)使用 #define 定義過。如果指定的標(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ù)化的宏來模擬函數(shù)。例如,下面的代碼是計(jì)算一個(gè)數(shù)的平方:

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

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

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

在使用帶有參數(shù)的宏之前,必須使用#define指令定義。參數(shù)列表是括在圓括號(hào)內(nèi),且必須緊跟在宏名稱的后邊。宏名稱和左圓括號(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)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1657

    瀏覽量

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

    關(guān)注

    0

    文章

    13

    瀏覽量

    2302

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

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

    編程是種思維方式,而代碼是種表現(xiàn)形式,硬件只不過是對(duì)思維方式的物理體現(xiàn)關(guān)于這句話,你怎么看?
    發(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綜合后的利用率只不過是實(shí)施后的利用率?

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

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

    c語(yǔ)言預(yù)處理命令以什么開頭,目前我并沒有windows軟件編寫經(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í)行程序的過程中, 編譯預(yù)處理是最初的步驟. 這步驟是由預(yù)處理器(pr
    發(fā)表于 09-20 18:17 ?47次下載

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

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

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

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

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

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

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

    編譯個(gè) C 程序設(shè)計(jì)很多步驟。其中第 1 個(gè)步驟被稱為預(yù)處理階段。C
    的頭像 發(fā)表于 05-31 09:52 ?867次閱讀
    <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 ?868次閱讀
    <b class='flag-5'>C</b>語(yǔ)言有哪些<b class='flag-5'>預(yù)處理</b>操作?

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

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

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

    C預(yù)處理器C Pre-Processor)也常簡(jiǎn)寫為 CPP,是個(gè)C 編譯
    的頭像 發(fā)表于 03-12 14:14 ?1022次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>預(yù)處理器</b>及其工作原理
    主站蜘蛛池模板: 久久久免费视频观看 | 91正在 播放 | 免费看片免费播放 | 上一篇26p国模 | 免费看毛片网 | 麻豆国产三级在线观看 | 亚洲国产精品婷婷久久 | 波多野结衣中文字幕教师 | 五月婷婷丁香综合网 | 国产视频观看 | 丁香欧美 | 亚洲成a人片毛片在线 | 国产一区二区三区美女在线观看 | 日本xxxxxxxx69| 1024 cc香蕉在线观看看中文 | 亚洲一区二区三区在线网站 | 久久久久久久久久免免费精品 | 91大神亚洲影视在线 | 国产一级大片免费看 | 中文字幕亚洲一区 | 国产三级网站在线观看 | 日本大片黄色 | 欧美日韩一日韩一线不卡 | 久久国产精品自在自线 | 天堂网中文字幕 | 精品久久久久久午夜 | 91一区二区三区四区五区 | 老司机色网 | 欧美婷婷综合 | 男女免费视频 | 美女毛片免费看 | sss华人在线play| 欧美zoozzooz在线观看 | 国产精品入口免费视频 | 欧美性一区二区三区 | 国产综合第一页在线视频 | 高清视频在线观看+免费 | 国产理论片在线观看 | 大又大又粗又爽女人毛片 | 中文永久免费看电视网站入口 | 奇米影视四色首页手机在线 |