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

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

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

3天內不再提示

C語言預處理命令是什么

汽車電子技術 ? 來源:嵌入式悅翔園 ? 作者: JamesBin~斌哥 ? 2023-02-17 13:59 ? 次閱讀

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

一、預處理是什么?

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

圖片

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

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

二、預處理有什么用?

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

所以,完整的步驟是:預編譯 -> 編譯 -> 鏈接

預編譯的主要作用如下:

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

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

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

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

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

指示預處理器打開一個名字為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\\n");
   #else
      printf("Not debugging\\n");
   #endif
   printf("Running\\n");
   return 0;
}

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

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

3、頭文件包含指令

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

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

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

#include 
 #include "my.h"

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

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

四、小結

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

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

    關注

    180

    文章

    7615

    瀏覽量

    137827
  • 命令
    +關注

    關注

    5

    文章

    697

    瀏覽量

    22126
  • 庫函數
    +關注

    關注

    0

    文章

    177

    瀏覽量

    34020
收藏 人收藏

    評論

    相關推薦

    C語言預處理

    編譯預處理器是C語言編譯器的一個重要組成部分。很好的利用C語言預處理
    發表于 06-03 17:23

    C語言常用的預處理命令

    1.基礎知識(1)C語言常用的預處理命令——typedef具體可見C語言基礎語法知識。(2)延時
    發表于 07-14 07:10

    c語言預處理命令以什么開頭

    c語言預處理命令以什么開頭,目前我并沒有windows軟件編寫經驗,對C語言的應用也僅限于各種單
    發表于 07-20 07:00

    LED流水燈C語言常用預處理命令

    LED流水燈C語言常用預處理命令 宏定義#define使用:#define 新名稱 原內容(不加分號)//對同一個內容,宏定義只能定義一次循環左移和右移函數,包含在instrins.h
    發表于 01-19 06:53

    C語言預處理命令有哪些?

    不止。先看幾個個常識性問題: A) 預處理C 語言的一部分嗎? B) 包含“#”號的都是預處理嗎? C)
    發表于 06-25 06:15

    基于51單片機--C語言預處理總結

    編譯預處理器是C語言編譯器的一個重要組成部分。很好的利用C語言預處理
    發表于 08-17 10:48 ?1105次閱讀

    C語言常用的預處理命令和循環左移右移函數的詳細資料概述

    本文檔的主要內容詳細介紹的是C語言常用的預處理命令和循環左移右移函數的詳細資料概述。
    發表于 10-22 08:00 ?71次下載

    LED流水燈開發教程之C語言常用預處理命令和循環左移右移函數資料概述

    本文檔的主要內容詳細介紹的是LED流水燈開發教程之C語言常用預處理命令和循環左移右移函數資料概述。
    發表于 11-12 08:00 ?7次下載
    LED流水燈開發教程之<b class='flag-5'>C</b><b class='flag-5'>語言</b>常用<b class='flag-5'>預處理</b><b class='flag-5'>命令</b>和循環左移右移函數資料概述

    C語言程序設計教程之預處理命令的詳細資料說明

    預處理命令的主要內容:三種預處理命令,宏定義,文件包含,條件編譯
    發表于 02-26 14:43 ?13次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>程序設計教程之<b class='flag-5'>預處理</b><b class='flag-5'>命令</b>的詳細資料說明

    8051單片機的預處理命令的詳細資料說明

    C程序中加入預處理命令可以改善程序結構,提高編譯效率。C語言提供的預處理
    發表于 06-11 17:47 ?0次下載
    8051單片機的<b class='flag-5'>預處理</b><b class='flag-5'>命令</b>的詳細資料說明

    宏和函數到底有什么區別

    宏是C語言預處理命令的一種。所謂宏定義,就是用一個標識符來表示一個字符串,如果在后面的代碼中出現了該標識符,那么就全部替換成指定的字符串。其形式如下:
    的頭像 發表于 02-22 17:32 ?7047次閱讀

    C語言預處理命令的分類和工作原理詳細說明

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

    C語言預處理指令及分類

    C/C++ 程序中的源代碼中包含以 # 開頭的各種編譯指令,這些指令稱為預處理指令。預處理指令不屬于 C/
    的頭像 發表于 11-29 10:14 ?2325次閱讀

    C語言-預處理(#define、#if...)

    C語言程序里,出現的#開頭的代碼段都屬于預處理預處理:是在程序編譯階段就執行的代碼段。
    的頭像 發表于 08-14 10:13 ?2714次閱讀

    C語言有哪些預處理操作?

    C語言預處理是在編譯之前對源代碼進行處理的階段,它主要由預處理器完成。預處理器是一個獨立的程序
    的頭像 發表于 12-08 15:40 ?681次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>有哪些<b class='flag-5'>預處理</b>操作?
    主站蜘蛛池模板: 欧美肉到失禁高h视频在线 欧美三级成人 | 一级做受毛片免费大片 | 一级毛片日韩 | 夜夜爽天天狠狠九月婷婷 | 欧美成人eee在线 | 免费观看三级毛片 | 五月婷婷深深爱 | 欧美一区二区三区综合色视频 | 国产精品免费观看网站 | 亚洲特黄大黄一级毛片 | 久久精品综合网 | 久久久综合色 | 欧美在线视频免费 | 日本黄色网页 | 日日夜夜爽 | 久青草免费在线视频 | 欧美黑人巨大日本人又爽又色 | 九色精品在线 | 麻豆三级视频 | 三级黄色在线视频中文 | 成年人一级毛片 | 亚洲福利视频一区二区三区 | 天天综合五月天 | 午夜影视啪啪免费体验区入口 | 欧美日韩亚洲国内综合网俺 | 一夜七次郎久久综合伊人 | 韩国三级视频在线观看 | 亚洲乱码一二三四区 | 国产真实偷乱视频在线观看 | 中国性猛交xxxxx免费看 | 香蕉视频在线观看黄 | 中文字幕在线一区二区在线 | 大香线蕉97久久 | 朋友夫妇和交换性bd高清 | 欧美奇米| 亚洲人成网站在线观看妞妞网 | 亚洲欧美日韩一区 | 狼人久草 | 色婷婷视频 | 成人看的一级毛片 | 日日夜夜天天干 |