日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言预处理命令分类和工作原理

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言预处理命令分类和工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言編程過程中,經常會用到如 #include、#define 等指令,這些標識開頭的指令被稱為預處理指令,預處理指令由預處理程序(預處理器)操作。

相比其他編程語言,C/C++ 語言更依賴預處理器,故在閱讀或開發 C/C++ 程序過程中,可能會接觸大量的預處理指令。

嵌入式專欄

1

預處理指令及分類

C/C++ 程序中的源代碼中包含以 # 開頭的各種編譯指令,這些指令稱為預處理指令。預處理指令不屬于 C/C++ 語言的語法,但在一定意義上可以說預處理擴展了 C/C++。

ANSI C 定義的預處理指令主要包括:文件包含、宏定義、條件編譯和特殊控制等 4 類。

1. 文件包含

文件包含:#include 是 C 程序設計中最常用的預處理指令。例如,幾乎每個需要輸入輸出的 C 程序,都要包含 #include指令,表示把 stdio.h 文件中的全部內容,替換該行指令。

包含文件的格式有 #include 后面跟尖括號 <> 和雙引號 "" 之分。兩者的主要差別是搜索路徑的不同。

尖括號形式:如 #include,預處理器直接到系統目錄對應文件中搜索 math.h 文件,搜索不到則報錯。系統提供的頭文件一般采用該包含方式,而自定義的頭文件不能采用該方式。

雙引號形式:如 #include"cal.h",首先到當前工作目錄下查找該文件,如果沒有找到,再到系統目錄下查找。包含自定義的頭文件,一般采用該方式。雖然系統頭文件采用此方式也正確,但浪費了不必要的搜索時間,故系統頭文件不建議采用該包含方式。

2.宏定義

宏定義:包括定義宏 #define 和宏刪除 #undef。

以 #define 開頭,可以定義無參數宏和帶參的宏定義。程序中經常使用無參宏定義來定義符號常量。例如:

#define?PI?3.1416?//定義無符號宏,或定義符號常量?PI

#undef 表示刪除已定義的宏,例如:

#undef?PI?//刪除前面該宏的定義

3.條件編譯

條件編譯:主要是為了有選擇性地執行相應操作,防止宏替換內容(如文件等)的重復包含。

常見的條件編譯指令有 #if、#elif、#else、#endif、#ifdef、#ifndef。

4.特殊控制

特殊控制:ANSI C 還定義了特殊作用的預處理指令,如 #error、#pragma。

#error:使預處理器輸出指定的錯誤信息,通常用于調試程序。

#pragma:是功能比較豐富且靈活的指令,可以有不同的參數選擇,從而完成相應的特 定功能操作。調用格式為:#pragma 參數。

其中,參數可以有 message 類型、code_seg、once、warning、pack 等。通常使用如下的預處理指令來設定內存以 n 字節對齊方式。

#pragma pack (n) //其中 n 稱為對齊系數,取 1、2、4、8...

嵌入式專欄

2

預處理器及其工作原理

C預處理器(C Pre-Processor)也常簡寫為 CPP,是一個與 C 編譯器獨立的小程序,預編譯器并不理解 C 語言語法,它僅是在程序源文件被編譯之前,實現文本替換的功能。

目前預編譯器巳集成到集成開發環境中,一般并沒有執行預處理操作的選項,而包含在了編譯操作中,即選擇編譯操作時,首先調用的是預處理器,處理源程序文件中的預處理指令,預處理器的輸出再送給編譯器,編譯器從 C 語言語法角度檢查程序是否正確,如果正確,則生成目標代碼文件或機器指令文件。

C 預處理器及 C 編譯器的執行順序及輸入輸出文件類型,如圖所示:

------------?END?------------

來源:http://c.biancheng.net/view/286.html ?

總結

以上是生活随笔為你收集整理的C语言预处理命令分类和工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。