C語言程式設計——9,預處理命令

ununie發表於2018-05-24

    以“#”開頭的預處理命令一般都放在函式之外,而且一般放在原始檔前面,他們成為預處理部分。

    預處理指的是進行編譯的第一遍掃描(語法掃描和語法分析)之前所作的工作。它由預處理程式負責完成。當對一個原始檔進行編譯時,系統自動引用預處理程式對預處理部分進行處理,處理完畢後自動進入對源程式的編譯。

    C語言的預處理功能主要有:

  • 巨集定義
  • 檔案包含
  • 條件編譯

巨集定義

    用一個識別符號來表示字串,稱為“巨集”,識別符號稱為巨集名。在編譯預處理階段,所有巨集名會被巨集定義中的字串替代,稱為“巨集展開”或“巨集代換”。巨集分為無參巨集和有參巨集。

   無參巨集定義

    巨集名後不帶引數

    格式:#define 識別符號 字串

    字串可以是常數、表示式、格式串,為了巨集代換不出現錯誤,字串最好加括號

    巨集定義作用域為巨集定義命令到源程式結束,可以用#undef提前終止作用域

    帶參巨集定義

    格式:#define 巨集名(形參表)    字串

檔案包含

    作用是把指定檔案插入命令列位置取代命令列,從而把指定檔案和當前源程式檔案連成一個原始檔。

    格式:#include "檔名"

              #include <檔名>

    使用<>表示在包含檔案目錄中去查詢(包含目錄是使用者在設定環境時設定的),而不在原始檔目錄查詢。

    使用“”表示首先在當前的原始檔目錄中查詢,若未找到才到包含目錄中去查詢。

條件編譯

    條件編譯功能可以按不同的條件去編譯不同的程式部分,因而產生不同的目的碼檔案。對於程式的移植和除錯很有用。

    三種形式

    1、

  #ifdef 識別符號
      程式段1
  #else            //若程式段2為空,則可以省略
      程式段2
  #endif

    2、

  #ifndef 識別符號    //if no define
      程式段1
  #else            //若程式段2為空,則可以省略
      程式段2
  #endif

3、

  #ifdef 常量表示式  //根據常量表示式的值判斷
      程式段1
  #else            //若程式段2為空,則可以省略
      程式段2
  #endif




    

相關文章