1. 程式人生 > >第八章 編譯預處理

第八章 編譯預處理

none 預處理 條件 所有 習慣 編譯預處理 目錄 子目錄 size

  • 編譯預處理指令
1)宏定義
(2)條件編譯
(3)文件包含
  • 宏定義

  宏定義是指將一個標識符(又稱宏名)定義為一個字符串(或稱替換文本)。在編譯預處理時,對程序中出現的所有宏名都用相應的替換文本去替換,這被稱為“宏替換”或“宏展開”。C語言中,“宏定義分為無參宏定義和帶參宏定義兩種。

    • 無參宏定義  
#define 標識符 替換文本

#define     表示該語句行是宏定義命令
標識符      所定義的宏名,習慣上用大寫字母表示
替換文本    可以是常量、關鍵字、表達式、語句等任意字符串。
    • 帶參宏定義
帶參宏定義的一般形式為:
#define
宏名(形參表) 替換文本 //中間沒有空格 如: #define M(y) y*y+3*y //宏定義 //形參一般用括號括起來 ... k = M(5); //宏引用 ... 宏展開時,先用 y*y+3*y 替換M(5),再將文本中的形參y用實參5代替,最終得到:k=5*5+3*5;

條件編譯

  • 條件編譯的三種形式
條件編譯有三種形式:

(1)如果標識符是已經被#define定義的宏名,就編譯程序段1,否則,編譯程序段2
#ifdef 標識符
    程序段1
#else
    程序段2
#endif

(2)與第一種相反,如果標識符未被定義,則對程序段1進行編譯
#ifndef 標識符
    程序段1
#else 程序段2 #endif (3)如果常量表達式的值為非真(0),則執行程序段1 #if 常量表達式 程序段1 #else 程序段2 #endif

文件包含

所謂文件包含是指在一個文件中包含另一個文件的全部內容,使之成為該文件的一部分。
文件包含由文件包含命令#include來實現,其一般形式為:

#include<文件名>   //格式一
#include"文件名"   //格式二

“文件名”是指被包含的文件,稱為頭文件。
文件包含命令的功能是將指定頭文件的內容包含到該命令出現的位置並替換此命令行。

    格式一與格式二的主要區別是在存放頭文件的路徑上。
    格式一的預處理程序只在系統規定的目錄(include子目錄,由用戶在設置編譯環境時設置)中
去查找指定的頭文件,若找不到,則出錯,這成為標準方式。如標準庫函數一般都使用格式一。
    使用格式二時,預處理程序現在當前工作目錄中尋找指定的頭文件,若找不到,再按標準方式
去查找。用戶自己編寫的頭文件一般都使用格式二。
    格式二中的雙引號內可以含有路徑,如:
#include
"C:\TC\F2.c"

第八章 編譯預處理