日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

C語言程序時(shí)經(jīng)常使用庫函數(shù)之前的預(yù)處理是什么?

GReq_mcu168 ? 來源:CSDN ? 作者:木槿花better ? 2021-04-16 09:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們?cè)趯?a href="http://m.sdkjxy.cn/soft/data/21-24/" target="_blank">C語言程序時(shí)經(jīng)常使用庫函數(shù)之前,應(yīng)該用#include引入對(duì)應(yīng)的頭文件。這種以#號(hào)開頭的命令稱為預(yù)處理命令。但是你對(duì)C語言的預(yù)處理了解多少呢?快來跟著斌哥一起學(xué)習(xí)一下C語言中的預(yù)處理吧!推薦關(guān)注下方公眾號(hào)學(xué)習(xí)更多電子技術(shù)知識(shí)!

一、預(yù)處理是什么?預(yù)處理指令是以#號(hào)開頭的代碼行。#號(hào)必須是該行除了任何空白字符外的第一個(gè)字符。#后是指令關(guān)鍵字,在關(guān)鍵字和#號(hào)之間允許存在任意個(gè)數(shù)的空白字符。整行語句構(gòu)成了一條預(yù)處理指令,該指令將在編譯器進(jìn)行編譯之前對(duì)源代碼做某些轉(zhuǎn)換。下面是部分預(yù)處理指令:

a0257bc0-9e2c-11eb-8b86-12bb97331649.png

還有下列幾種預(yù)處理宏(是雙下劃線)

__LINE__ 表示正在編譯的文件的行號(hào)__FILE__表示正在編譯的文件的名字__DATE__表示編譯時(shí)刻的日期字符串__TIME__ 表示編譯時(shí)刻的時(shí)間字符串__STDC__ 判斷該文件是不是定義成標(biāo)準(zhǔn) C 程序

二、預(yù)處理有什么用?在集成開發(fā)環(huán)境中,編譯,鏈接是同時(shí)完成的。其實(shí),C語言編譯器在對(duì)源代碼編譯之前,還需要進(jìn)一步的處理:預(yù)編譯。

所以,完整的步驟是:預(yù)編譯 -》 編譯 -》 鏈接預(yù)編譯的主要作用如下:

1.將源文件中以”include”格式包含的文件復(fù)制到編譯的源文件中。2.用實(shí)際值替換用“#define”定義的字符串。3.根據(jù)“#if”后面的條件決定需要編譯的代碼。

預(yù)處理是C語言的一個(gè)重要功能,由預(yù)處理程序完成。當(dāng)對(duì)一個(gè)源文件進(jìn)行編譯時(shí),系統(tǒng)將自動(dòng)調(diào)用預(yù)處理程序?qū)υ闯绦蛑械念A(yù)處理部分作處理,處理完畢自動(dòng)進(jìn)入對(duì)源程序的編譯。

預(yù)處理的行為是由指令控制的。這些指令是由#字符開頭的一些命令。

#define指令定義了一個(gè)宏---用來代表其他東西的一個(gè)命令,通常是某一個(gè)類型的常量。預(yù)處理會(huì)通過將宏的名字和它的定義存儲(chǔ)在一起來響應(yīng)#define指令。當(dāng)這個(gè)宏在后面的程序中使用到時(shí),預(yù)處理器”擴(kuò)展”了宏,將宏替換為它所定義的值。例如:下面這行命令:

1#define PI 3.141592654

#include指令告訴預(yù)處理器打開一個(gè)特定的文件,將它的內(nèi)容作為正在編譯的文件的一部分“包含”進(jìn)來。例如:下面這行命令:

1#include《stdio.h》

指示預(yù)處理器打開一個(gè)名字為stdio.h的文件,并將它的內(nèi)容加到當(dāng)前的程序中。

預(yù)處理器的輸入是一個(gè)C語言程序,程序可能包含指令。預(yù)處理器會(huì)執(zhí)行這些指令,并在處理過程中刪除這些指令。預(yù)處理器的輸出是另外一個(gè)程序:原程序的一個(gè)編輯后的版本,不再包含指令。預(yù)處理器的輸出被直接交給編譯器,編譯器檢查程序是否有錯(cuò)誤,并經(jīng)程序翻譯為目標(biāo)代碼。

三、3種預(yù)處理詳解1、宏定義指令

宏定義了一個(gè)代表特定內(nèi)容的標(biāo)識(shí)符。預(yù)處理過程會(huì)把源代碼中出現(xiàn)的宏標(biāo)識(shí)符替換成宏定義時(shí)的值。宏最常見的用法是定義代表某個(gè)值的全局符號(hào)。宏的第二種用 法是定義帶參數(shù)的宏(宏函數(shù)),這樣的宏可以象函數(shù)一樣被調(diào)用,但它是在調(diào)用語句處展開宏,并用調(diào)用時(shí)的實(shí)際參數(shù)來代替定義中的形式參數(shù)。

1.1 #define指令

1.1.1 #define預(yù)處理指令用來定義宏。該指令最簡單的格式是:聲明一個(gè)標(biāo)識(shí)符,給出這個(gè)標(biāo)識(shí)符代表的代碼(比如像圓周率這樣的數(shù))。在后面的源代碼中,我們就可以使用定義的宏取代要使用的代碼,代碼舉例:

#define PI 3.141592654

1.1.2 使用宏的好處有兩點(diǎn)

一是使用方便。如下:

#define PI 3.1415926

PI顯然比3.1415926寫著方便。

二是定義的宏有了意義,可讀性強(qiáng)。如例1,MAX_NUM,望文生意便知是最大數(shù)量的意思,比單純使用10這個(gè)數(shù)字可讀性要強(qiáng)的多。

三是容易修改。如例1,如果在程序中有幾十次會(huì)使用到MAX_NUM,修改只需要在宏定義里面修改一次就可以,否則你會(huì)修改到崩潰。

2、條件編譯指令

程序員可以通過定義不同的宏來決定編譯程序?qū)δ男┐a進(jìn)行處理。條件編譯指令將決定哪些代碼被編譯,而哪些是不被編譯的??梢愿鶕?jù)表達(dá)式的值或者某個(gè)特定的宏是否被定義來確定編譯條件。

2.1 #if/#endif/#else/#elif指令

#if指令檢測跟在制造另關(guān)鍵字后的常量表達(dá)式。如果表達(dá)式為真,則編譯后面的代碼,直到出現(xiàn)#else、#elif或#endif為止;否則就不編譯。

#endif用于終止#if預(yù)處理指令。#else指令用于某個(gè)#if指令之后,當(dāng)前面的#if指令的條件不為真時(shí),就編譯#else后面的代碼。

代碼舉例

#define DEBUG //此時(shí)#ifdef DEBUG為真//#define DEBUG 0 //此時(shí)為假int main(){ #ifdef DEBUG printf(“Debugging

”); #else printf(“Not debugging

”); #endif printf(“Running

”); return 0;}

這樣我們就可以實(shí)現(xiàn)debug功能,每次要輸出調(diào)試信息前,只需要#ifdef DEBUG判斷一次。不需要了就在文件開始定義#define DEBUG 0

#elif預(yù)處理指令綜合了#else和#if指令的作用。

3、頭文件包含指令

采用頭文件的目的主要是為了使某些定義可以供多個(gè)不同的C源程序使用。因?yàn)樵谛枰玫竭@些定義的C源程序中,只需加上一條#include語句即可,而不必再在此文件中將這些定義重復(fù)一遍。預(yù)編譯程序?qū)杨^文件中的定義統(tǒng)統(tǒng)都加入到它所產(chǎn)生的輸出文件中,以供編譯程序?qū)χM(jìn)行處理。

#include預(yù)處理指令的作用是在指令處展開被包含的文件。包含可以是多重的,也就是說一個(gè)被包含的文件中還可以包含其他文件。標(biāo)準(zhǔn)C編譯器至少支持八重嵌套包含。預(yù)處理過程不檢查在轉(zhuǎn)換單元中是否已經(jīng)包含了某個(gè)文件并阻止對(duì)它的多次包含,這個(gè)的處理辦法上面已經(jīng)給出。

在程序中包含頭文件有兩種格式:

#include 《my.h》 #include “my.h”

第一種方法是用尖括號(hào)把頭文件括起來。這種格式告訴預(yù)處理程序在編譯器自帶的或外部庫的頭文件中搜索被包含的頭文件。第二種方法是用雙引號(hào)把頭文件括起 來。這種格式告訴預(yù)處理程序在當(dāng)前被編譯的應(yīng)用程序的源代碼文件中搜索被包含的頭文件,如果找不到,再搜索編譯器自帶的頭文件。

采用兩種不同包含格式的理由在于,編譯器是安裝在公共子目錄下的,而被編譯的應(yīng)用程序是在它們自己的私有子目錄下的。一個(gè)應(yīng)用程序既包含編譯器提供的公共 頭文件,也包含自定義的私有頭文件。采用兩種不同的包含格式使得編譯器能夠在很多頭文件中區(qū)別出一組公共的頭文件。

四、小結(jié)預(yù)編譯程序所完成的基本上是對(duì)源程序的“替代”工作。經(jīng)過此種替代,生成一個(gè)沒有宏定義、沒有條件編譯指令、沒有特殊符號(hào)的輸出文件。這個(gè)文件的含義同沒有經(jīng)過預(yù)處理的源文件是相同的,但內(nèi)容有所不同。下一步,此輸出文件將作為編譯程序的輸出而被翻譯成為機(jī)器指令。

原文標(biāo)題:C語言預(yù)處理命令你知道多少?

文章出處:【微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    183

    文章

    7646

    瀏覽量

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

    關(guān)注

    0

    文章

    33

    瀏覽量

    10841

原文標(biāo)題:C語言預(yù)處理命令你知道多少?

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    C語言主要特點(diǎn)

    ,源程序短,因此輸入程序時(shí)工作量少。 2.運(yùn)算符豐富,C語言的運(yùn)算符包含的范圍很廣泛,共有34種運(yùn)算符。C
    發(fā)表于 01-05 07:41

    為什么c語言沒有輸出?

    我在寫c語言程序的時(shí)候,經(jīng)常程序編譯的時(shí)候沒有輸出,經(jīng)總結(jié),發(fā)現(xiàn)有以下原因: 1、scanf里沒有加 。 2、邏輯問題,可能沒有輸入,
    發(fā)表于 01-05 06:40

    C語言函數(shù)指針的六個(gè)高級(jí)的應(yīng)用場景

    函數(shù)指針是一種非常強(qiáng)大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 6 個(gè)函數(shù)指針的高級(jí)應(yīng)用場景,并貼出相應(yīng)的代碼案例和解釋。 回調(diào)函數(shù) 回調(diào)
    發(fā)表于 01-04 12:25

    C語言回調(diào)函數(shù)原來這么簡單

    了解開發(fā)語言的朋友應(yīng)該都會(huì)對(duì)回調(diào)函數(shù)有所了解,在很多的程序開發(fā)語言中都能看到回調(diào)的身影。很多場景下,當(dāng)某個(gè)條件成立以后我們**代碼執(zhí)行某些指定的部分,這個(gè)時(shí)候可以考慮使用回調(diào)
    發(fā)表于 12-30 06:45

    如何用好 C 語言函數(shù)的返回值?

    。 C語言也有“行業(yè)潛規(guī)則”,不過,對(duì)于一般的函數(shù),大多數(shù)C語言程序員常常使用返回值 0 表示成
    發(fā)表于 12-25 07:17

    在ADS編譯器中,用標(biāo)準(zhǔn)的C庫函數(shù)printf()需要哪些設(shè)置呢?

    在ADS編譯器中,用標(biāo)準(zhǔn)的C庫函數(shù)printf()需要哪些設(shè)置呢?又在哪兒可以看到printf()輸出的信息呢?
    發(fā)表于 12-23 07:32

    使用信號(hào)處理函數(shù)

    內(nèi)存地址時(shí),系統(tǒng)會(huì)發(fā)送SIGSEGV信號(hào);當(dāng)用戶按下Ctrl-C鍵時(shí),系統(tǒng)會(huì)發(fā)送SIGINT信號(hào);當(dāng)程序執(zhí)行除零操作時(shí),系統(tǒng)會(huì)發(fā)送SIGFPE信號(hào)等。C語言提供了signal
    發(fā)表于 12-11 06:40

    C語言C++之間的區(qū)別是什么

    函數(shù)重載,即在同一作用域內(nèi)可以定義多個(gè)同名函數(shù),只要它們的參數(shù)列表不同即可。 C語言不支持函數(shù)重載,每個(gè)
    發(fā)表于 12-11 06:23

    看懂C語言程序中的內(nèi)聚和耦合

    的設(shè)計(jì)提出了要求。 程序設(shè)計(jì)和軟件工程發(fā)展過程中產(chǎn)生的很多技術(shù)、設(shè)計(jì)原則,都可以從內(nèi)聚和耦合的角度進(jìn)行解讀。作為C語言程序設(shè)計(jì)的初學(xué)者,結(jié)合當(dāng)前對(duì)于
    發(fā)表于 12-08 06:37

    C語言宏拼接運(yùn)算符典型使用

    C語言中,##運(yùn)算符(稱為[size=16.002px]標(biāo)記拼接運(yùn)算符)用于宏定義中將兩個(gè)標(biāo)記(token)拼接成一個(gè)新的標(biāo)記。它在預(yù)處理階段處理,常用于動(dòng)態(tài)生成變量名、
    發(fā)表于 11-20 08:27

    單片機(jī)啟動(dòng)&庫函數(shù)的構(gòu)成

    部分會(huì)教你如何看寄存器。 第二部分庫函數(shù)和寄存 我們都知道計(jì)算機(jī)編程最早使用的是機(jī)器語言,也就是用打點(diǎn)紙帶來編程,后續(xù)出現(xiàn)了匯編語言,使用助記符來輔助編程,再到后來的C
    發(fā)表于 11-18 08:15

    深度剖析Nios II 處理器的硬件抽象層

    )與ANSI C標(biāo)準(zhǔn)庫綜合在一起,可使用類似C語言庫函數(shù)來訪問硬件設(shè)備或文件,如printf()、fopen()、fwrite()等函數(shù)。
    的頭像 發(fā)表于 10-31 15:25 ?5190次閱讀
    深度剖析Nios II <b class='flag-5'>處理</b>器的硬件抽象層

    詳解hal_entry入口函數(shù)

    當(dāng)使用RTOS時(shí),程序從main函數(shù)開始進(jìn)行線程調(diào)度;當(dāng)沒有使用RTOS時(shí),C語言程序的入口函數(shù)
    的頭像 發(fā)表于 07-25 15:34 ?2251次閱讀

    C語言中的內(nèi)聯(lián)函數(shù)與宏

    C編程中,內(nèi)聯(lián)函數(shù)和宏都用于避免函數(shù)調(diào)用的開銷并編寫可復(fù)用的邏輯部分,但它們?cè)诠ぷ鞣绞胶桶踩苑矫娲嬖陲@著差異。
    的頭像 發(fā)表于 07-25 15:10 ?2108次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的內(nèi)聯(lián)<b class='flag-5'>函數(shù)</b>與宏

    深入理解C語言函數(shù)—編程中的“積木塊”藝術(shù)

    在編程的世界里,函數(shù)就像建筑中的“積木塊”——它們是構(gòu)建復(fù)雜程序的基石。通過靈活組合這些模塊,開發(fā)者能打造出功能強(qiáng)大且結(jié)構(gòu)清晰的代碼。函數(shù)之所以成為C
    的頭像 發(fā)表于 06-30 17:26 ?2090次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:<b class='flag-5'>函數(shù)</b>—編程中的“積木塊”藝術(shù)
    永靖县| 汉寿县| 张北县| 抚顺县| 崇明县| 镇巴县| 凌源市| 龙泉市| 英山县| 通海县| 罗山县| 建水县| 鞍山市| 曲水县| 仪征市| 冕宁县| 沙湾县| 山丹县| 南阳市| 新野县| 宣汉县| 剑川县| 濉溪县| 开阳县| 嘉兴市| 张北县| 洪雅县| 松原市| 巴中市| 西乌| 永昌县| 云阳县| 兴城市| 长子县| 元阳县| 兰西县| 万源市| 鄂托克旗| 轮台县| 威远县| 鄂温|