預處理和巨集

2021-09-24 12:26:39 字數 1731 閱讀 4909

2019獨角獸企業重金招聘python工程師標準》

檔案包含:

#include<>:到系統指定的路徑尋找,一般是:/user/include;

#include 「」:優先從當前目錄開始,一般適用於自定義標頭檔案。

#define pi 3.1415
單純的替換

注意:不要加等號,不要末尾加分號。

#define max(x,y) (x)>(y)?(x):(y)
注意:

#define mul(x,y) x*y 

//很容易出錯,mul(1+2,2+3),替換後1+2*2+3

#define mul(x,y) (x)*(y)

//還是會錯,30/mul(1+2,2+3),替換後30/3*5,但是其實是想30/(3*5)

#define mul(x,y) ((x)*(y))

//這樣才對

//#:將巨集中的引數轉換為字面值常量。限定:只能出現在帶引數的巨集的替換列表中。

#define print(n) printf(#n"=%d",n)

//##:將兩個識別符號粘合在一起形成乙個識別符號

#define mk_id(n)i_##n

mk_id(1) i_1

mk_id(23) i_23

<1>__line__:當前正當編譯的程式的行號 %d

<2>__file__:當前正當編譯的源程式的名字 %s

<3>__date__:編譯程式的日期 %s

<4>__time__:編譯程式的時間 %s

<5>__stdc__:判斷編譯器是否符合c標準,返回0或者返回1。一般:__stdc__?"符合":"不符合"

#if 、#elif 、#else、#endif

防止該標頭檔案被重複引用。

#if defined(db_sqlserver) // 如果定義了db_sqlserver

connectsqlserver(); // 連線sqlserver資料庫

#elif defined(db_access) // 如果定義了db_access

connectaccess(); // 連線access資料庫

#else // 如果沒有定義資料庫型別

printerror(); // 輸出錯誤資訊

#endif

//交換兩個引數值的巨集定義為:

#define swap(a,b)\

(a)=(a)+(b);\

(b)=(a)-(b);\

(a)=(a)-(b);

//輸入兩個引數,輸出較小的乙個:

#define min(a,b) ((a) < (b))? (a) : (b))

//表明1年中有多少秒(忽略閏年問題):

#define seconds_per_year (60 * 60 * 24 * 365)ul

//已知乙個陣列table,用乙個巨集定義,求出資料的元素個數

#define ntbl

#define ntbl (sizeof(table)/sizeof(table[0]))

預處理指令和巨集

1.預定義指令 file 進行編譯的原始檔 line 檔案當前的行號 date 檔案被編譯的日期 time 檔案被編譯的時間 stdc 如果編譯器遵循ansi c,其值為1,否則未定義。這樣可以輸出當前編譯檔案的相關資訊 2.巨集和函式的區別 1 巨集允許把引數替換到文字中。巨集引數和 define...

預處理 巨集定義

1,預處理 預處理是指在進行編譯的第一遍掃瞄 詞法掃瞄和語法分析 之前所作的工作。預處理是 語言的乙個重要功能,它由預處理程式負責完成。當對乙個原始檔進行編譯時,系統將自動引用預處理程式對源程式中的預處理部分作處理,處理完畢自動進入對源程式的編譯。語言提供了多種預處理功能,如巨集定義 檔案包含 條件...

C語言 預處理和巨集定義

今天分享一點c語言的預處理還有巨集相關的內容。目錄 預處理和巨集定義 一 乙個c程式的誕生 1 預編譯階段 c i 2 編譯階段 i s 3 彙編階段 s o 4 鏈結階段 該程式的所有.o exe 1 c語言中部分內建巨集 2 巨集的功能 1 使用巨集定義常量 2 使用巨集重新命名運算子 3 使用...