程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 面試問題4:C語言預處理包括哪些,面試預處理

面試問題4:C語言預處理包括哪些,面試預處理

編輯:關於C語言

面試問題4:C語言預處理包括哪些,面試預處理


問題描述:C語言 預處理包括哪些操作

  C語言的三種預處理包括:宏定義(#define)、文件包含(#include)、條件編譯(#if、#else、#endif)。

對於宏定義的介紹:

   宏定義必須寫在函數外,其作用域為宏定義起到源程序結束。C語言源程序中允許用一個標識符來表示一個字符串,稱為“宏”。被定義為宏的標識符稱為“宏名”。在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字符串去代換,這稱為宏替換或宏展開。

  無參宏的宏名後不帶參數。其定義的一般形式為: #define  標識符  字符串。 其中,“#”表示這是一條預處理命令(以#開頭的均為預處理命令)。“define”為宏定義命令。“標識符”為符號常量,即宏名。“字符串”可以是常數、表達式、格式串等。

  C語言允許宏帶有參數。在宏定義中的參數稱為形式參數,在宏調用中的參數稱為實際參數。      對帶參數的宏,在調用中,不僅要宏展開,而且要用實參去代換形參。 帶參宏定義的一般形式為:  #define  宏名(形參表)  字符串   舉例說明:   #define INC(x) x+1  //宏定義    y = INC(5);           //宏調用      在宏調用時,用實參5去代替形參x,經預處理宏展開後的語句為y=5+1。    帶參宏注意事項: (1)宏名和形參表的括號間不能有空格。 (2)宏替換只作替換,不做計算,不做表達式求解。 (3)函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存。 (4)宏展開不占用運行時間,只占編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。 (5)為防止無限制遞歸展開,當宏調用自身時,不再繼續展開。如:#define TEST(x)  (x + TEST(x))被展開為1 + TEST(1)。 #include<a.h>和#include“ a.h“ 的區別: 使用尖括號表示在包含文件目錄中去查找(包含目錄是由用戶在設置環境時設置的include目錄),而不在當前源文件目錄去查找; 使用雙引號則表示首先在當前源文件目錄中查找,若未找到才到包含目錄中去查找。用戶編程時可根據自己文件所在的目錄來選擇某一種命令形式。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved