色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

C語言程序時經常使用庫函數之前的預處理是什么?

GReq_mcu168 ? 來源:CSDN ? 作者:木槿花better ? 2021-04-16 09:47 ? 次閱讀

我們在寫C語言程序時經常使用庫函數之前,應該用#include引入對應的頭文件。這種以#號開頭的命令稱為預處理命令。但是你對C語言的預處理了解多少呢?快來跟著斌哥一起學習一下C語言中的預處理吧!推薦關注下方公眾號學習更多電子技術知識!

一、預處理是什么?預處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字符外的第一個字符。#后是指令關鍵字,在關鍵字和#號之間允許存在任意個數的空白字符。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯之前對源代碼做某些轉換。下面是部分預處理指令:

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

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

__LINE__ 表示正在編譯的文件的行號__FILE__表示正在編譯的文件的名字__DATE__表示編譯時刻的日期字符串__TIME__ 表示編譯時刻的時間字符串__STDC__ 判斷該文件是不是定義成標準 C 程序

二、預處理有什么用?在集成開發環境中,編譯,鏈接是同時完成的。其實,C語言編譯器在對源代碼編譯之前,還需要進一步的處理:預編譯。

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

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

預處理是C語言的一個重要功能,由預處理程序完成。當對一個源文件進行編譯時,系統將自動調用預處理程序對源程序中的預處理部分作處理,處理完畢自動進入對源程序的編譯。

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

#define指令定義了一個宏---用來代表其他東西的一個命令,通常是某一個類型的常量。預處理會通過將宏的名字和它的定義存儲在一起來響應#define指令。當這個宏在后面的程序中使用到時,預處理器”擴展”了宏,將宏替換為它所定義的值。例如:下面這行命令:

1#define PI 3.141592654

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

1#include《stdio.h》

指示預處理器打開一個名字為stdio.h的文件,并將它的內容加到當前的程序中。

預處理器的輸入是一個C語言程序,程序可能包含指令。預處理器會執行這些指令,并在處理過程中刪除這些指令。預處理器的輸出是另外一個程序:原程序的一個編輯后的版本,不再包含指令。預處理器的輸出被直接交給編譯器,編譯器檢查程序是否有錯誤,并經程序翻譯為目標代碼。

三、3種預處理詳解1、宏定義指令

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

1.1 #define指令

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

#define PI 3.141592654

1.1.2 使用宏的好處有兩點

一是使用方便。如下:

#define PI 3.1415926

PI顯然比3.1415926寫著方便。

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

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

2、條件編譯指令

程序員可以通過定義不同的宏來決定編譯程序對哪些代碼進行處理。條件編譯指令將決定哪些代碼被編譯,而哪些是不被編譯的??梢愿鶕磉_式的值或者某個特定的宏是否被定義來確定編譯條件。

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

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

#endif用于終止#if預處理指令。#else指令用于某個#if指令之后,當前面的#if指令的條件不為真時,就編譯#else后面的代碼。

代碼舉例

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

”); #else printf(“Not debugging

”); #endif printf(“Running

”); return 0;}

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

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

3、頭文件包含指令

采用頭文件的目的主要是為了使某些定義可以供多個不同的C源程序使用。因為在需要用到這些定義的C源程序中,只需加上一條#include語句即可,而不必再在此文件中將這些定義重復一遍。預編譯程序將把頭文件中的定義統統都加入到它所產生的輸出文件中,以供編譯程序對之進行處理。

#include預處理指令的作用是在指令處展開被包含的文件。包含可以是多重的,也就是說一個被包含的文件中還可以包含其他文件。標準C編譯器至少支持八重嵌套包含。預處理過程不檢查在轉換單元中是否已經包含了某個文件并阻止對它的多次包含,這個的處理辦法上面已經給出。

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

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

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

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

四、小結預編譯程序所完成的基本上是對源程序的“替代”工作。經過此種替代,生成一個沒有宏定義、沒有條件編譯指令、沒有特殊符號的輸出文件。這個文件的含義同沒有經過預處理的源文件是相同的,但內容有所不同。下一步,此輸出文件將作為編譯程序的輸出而被翻譯成為機器指令。

原文標題:C語言預處理命令你知道多少?

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

責任編輯:haq

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

    關注

    180

    文章

    7605

    瀏覽量

    136993
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10504

原文標題:C語言預處理命令你知道多少?

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用C語言實現函數模板

      用C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?402次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的
    的頭像 發表于 11-01 16:51 ?344次閱讀

    C55x CSL音頻預處理

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

    技術干貨驛站 ▏深入理解C語言:掌握程序結構知識

    在計算機編程的世界中,C語言被廣泛認可為一門強大而高效的編程語言,其簡潔的語法和直接的指令使得它成為了許多程序員的首選。了解C
    的頭像 發表于 07-27 08:45 ?1425次閱讀
    技術干貨驛站 ▏深入理解<b class='flag-5'>C</b><b class='flag-5'>語言</b>:掌握<b class='flag-5'>程序</b>結構知識

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

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

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

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

    怎么開始學習stm8l的庫函數

    之前用的都是51單片機,雖然有上過stm32的課但是當時忙于考研基本沒學,對庫函數根本不了解,現在我參加一個需要用stm8l做環境檢測和無線組網的項目,想知道該怎么快速上手stm8l。應該怎么開始學習stm8l的庫函數,各位有
    發表于 05-11 08:12

    請問為什么非main.c的其他文件能調用庫函數?

    在main.c中調用庫函數我可能理解: 是因為在main.c中引用了#include \"sys.h\"頭文件,而這個頭文件包含了各庫函數的定義聲明。 但其他文件諸如這樣
    發表于 04-25 06:49

    C預處理器及其工作原理

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

    C語言#define的應用

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

    C語言中的預處理

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

    C語言中的頭文件

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

    TC397怎么添加標準C庫函數?

    想使用一些標準的C庫函數,如math.h中的一些sin,cos等函數,但是不知道怎么添加,請問有人操作過這種嗎,請賜教。
    發表于 02-02 08:04

    學習筆記分享|使用C庫函數控制ELF 1開發板的LED

    (ELF1/ELF1S開發板及顯示屏)在嵌入式Linux系統開發中,通過編程控制硬件資源是至關重要的技能之一,今天跟各位小伙伴分享一篇專注于介紹如何使用C庫函數控制ELF1開發板LED的學習筆記
    的頭像 發表于 01-19 11:12 ?579次閱讀
    學習筆記分享|使用<b class='flag-5'>C</b><b class='flag-5'>庫函數</b>控制ELF 1開發板的LED

    為什么我的電腦在燒錄程序時經常藍屏?

    為什么我的電腦在燒錄程序時經常藍屏
    發表于 01-19 07:27
    主站蜘蛛池模板: 亚洲精品另类有吗中文字幕| 久久偷拍国2017的| 国产高清视频在线观看97| 邻家美姨在线观看全集免费| 亚洲爆乳无码精品AAA片蜜桃| 公交车轮C关老师| 轻轻挺进女教师的身体| 99久久免费只有精品| 老师别揉我胸啊嗯小说| 99久久就热视频精品草| 手机看片成人| 国产成人精品免费视频下载| 日日久久狠狠8888偷偷色| 亚洲欧美一区二区三区蜜芽| 国产麻豆精品久久一二三| 色欲天天天综合网免费| 嘟嘟嘟影院免费观看视频| 色老汉网址导航| 精品免费久久久久久影院| 亚洲欧洲精品成人久久曰影片 | 亚洲热在线视频| 男人J桶女人P视频无遮挡网站| 一本道无码v亚洲| 精品国产自在自线官方| FREE性丰满HD毛多多| 人曽交Z00Z0OA片| 国产精品JIZZ在线观看A片| 一个人色导航| 男女久久久国产一区二区三区| 俄罗斯另类Z0Z0ZOZO| 伊人网站在线| 蜜芽资源高清在线观看| JLZZJLZZJLZ老师好多的水| 少妇被阴内射XXXB少妇BB| 久久精品影视| 99视频在线免费观看| 色 花 堂 永久 网站| 久久久综合中文字幕久久| 国产成人无码AV麻豆| 99久久久A片无码国产精| 一本之道高清在线观看一区|