C語言巨集定義用法注意事項與好處

2021-07-11 12:16:04 字數 1133 閱讀 1602

1.  乙個識別符號被巨集定義後,該識別符號便是乙個巨集名。這時,在程式中出現的是巨集名,在該程式被編譯前,先將巨集名用被定義的字串替換,這成為巨集替換,替換後才進行編譯,

巨集替換是簡單的替換

2.   #include

#define n 2

int main(int argc,char**argv)

這段程式執行結果為 4.但是假如把 n巨集定義為 2+2;那麼執行結果該是多少呢?是16麼;

#include

#define n 2

int main(int argc,char**argv)

顯然執行結果不是16,而是8,為什麼會出現這種情況呢,這是因為c語言的巨集定義只是簡單的替換,他遵循,先替換,再計算的原則

實際計算的式子為  2+2*2+2   

如果想要出現16,需要這麼寫

#include

#define n (2+2)

int main(int argc,char**argv)

3.  使用巨集定義函式時,同樣需要注意這個問題,如下**所示,執行的結果是16麼?

#include

#define area(x)  x*x

int main(int argc,char**argv)

顯然執行的結果不是16,而是8.  同樣的道理,在寫巨集定義函式時,引數的表達也要加上();

如下#include

#define area(x)  (x)*(x)

int main(int argc,char**argv)

4. 使用巨集定義函式除了要注意引數要加()外,還需注意一點,在上邊程式的基礎上,假如計算的是   area(2+2)/area(2+2);

計算結果是1麼?經驗證,不是,結果為16,還是以簡單替換的原則,不加任何符號,分析一下,發現,實際的計算公式為

(2+2)*(2+2)/(2+2)*(2+2);根據加減乘除運算可得結果為16;

那為了讓他結果為1 ,應該怎麼寫呢?**如下

#include

#define area(x)  ((x)*(x))

int main(int argc,char**argv)

所以總結:  用巨集定義時,含引數時,引數本身要加(),此外,對引數的操作整體也要加()。

巨集定義的注意事項

巨集定義不是函式,它只是不同形式的替換而已,不同於函式的引數巨集定義的引數 暫且稱之為引數 不是作為乙個整體參與計算的,如下例子所示 include using namespace std define fun1 x x x define fun2 x x x int fun3 int x int ...

C語言指標用法注意事項

計算機系統中有四個記憶體區域 1 棧 在棧裡面儲存一些我們定義的區域性變數以及形參 2 字元常量區 主要是儲存一些字元常量 3 全域性區 在全域性區里儲存一些全域性變數和靜態變數 4 堆 堆主要是通過動態分配的儲存空間,即以下講的講的動態分配記憶體空間。定義int型指標int p,p是用來儲存乙個位...

C語言巨集定義使用方法和注意事項

一 總結 1 預處理器直接對巨集進行文字替換 2 巨集使用時的引數不會進行求值和運算 3 預處理器不會對巨集定義進行語法檢查,巨集定義時出現的語法錯誤只能被編譯器檢測 4 巨集定義的效率高於函式呼叫 巨集不占用記憶體,函式占用記憶體 5 巨集的使用會帶來一定的 6 define定義的巨集可以出現在程...