巨集定義與條件編譯的用處
阿新 • • 發佈:2019-01-28
#define 定義巨集
#undef 取消已定義的巨集
巨集定義常量與命令可以避免幻數 在巨集定義命名時候應該儘量清楚表明其用途。
函式型巨集定義的有點:儘管其和真正的函式相比有很多缺點,但只要小心使用還是會顯著提高程式碼的執行效率,畢竟省去了分配和釋放棧幀,傳參,傳返回值等一系列工作
因此那些簡短並且被頻繁呼叫的函式經常用函式型巨集定義來代替實現。
#if 如果給定條件為真,則編譯下面程式碼
#ifdef 如果巨集已經定義,則編譯下面程式碼
#ifndef 如果巨集沒有定義,則編譯下面程式碼
#elif 如果前面的#if給定條件不為真,當前條件為真,則編譯下面程式碼,其實就是else if的簡寫
#endif 結束一個#if……#else條件編譯塊
#ifdef 和 #ifndef這二者主要用於防止重複包含。我們一般在.h標頭檔案前面加上這麼一段:
//標頭檔案防止重複包含
//funcA.h
#ifndef FUNCA_H
#define FUNCA_H
//標頭檔案內容
#end if
這樣,如果a.h包含了funcA.h,b.h包含了a.h、funcA.h,重複包含,會出現一些type redefination之類的錯誤。
#if defined等價於#ifdef; #if !defined等價於#ifndef