說到巨集定義,我們應該先了解什麼是預處理指令,相信大家並不會陌生,之前我們程式設計時,程式的開頭#include指令,#define指令都是預處理指令,它能使我們的編譯更加的高效,便捷,因此c語言中是允許使用者自己加入一些特定的預處理指令的。
一,不帶引數的巨集定義
不帶引數的巨集定義是比較簡單的,就是用乙個指定的識別符號來代表乙個字串。它的一般形式為;
#define 識別符號 字串
例如#define e 2.718281828459
它的作用是在本程式檔案中用指定的識別符號e來代替2.718281828459這個字串。在進行預處理時,將程式中凡是在該指令以後出現的所有的e都用2.718281828459代替。這種方法使使用者能以乙個簡單的名字代替乙個長的字串,因此把這個識別符號(名字)稱為"巨集名」
在預處理時將巨集名替換成字串的過程稱為"巨集展開「。#define就是巨集定義指令。
二,帶引數的巨集定義
帶引數的巨集定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;
#define 識別符號(巨集名)(參數列) 字串
字串中包含在括號中所指定的引數。
例;#define s(a,b) a*b
area=s(3. 2)
以上意思就是矩形的面積為長乘寬,程式中使用了巨集定義替代了原來的s=a*b ,方便了當出現大量面積計算時的複雜。
對帶引數的巨集定義是這樣進行展開置換的在程式中如果有帶實參的巨集,如上,則按#define指令行中指定的字串從左到右進行置換。如果字串中包含巨集中的形參(如a,b),則將程式語句中相應的實參(可以是常量、變數或表示式)代替形參。如果巨集定義中的字串中的字元不是引數字元,則保留。這樣就形成了置換的字串。
首先我們先用不帶引數的巨集定義進行編譯;程式中,只需要輸入圓的半徑,就可以計算出圓形的面積。
#include
#define pi 3.1415926
int main()
{double r,s;
printf("請輸入圓的半徑\n");
scanf("%lf",&r);
s=pi*r*r;
printf("圓的面積為: %lf",r);
return 0;
以上是不帶引數的巨集定義的程式
#include
#define pi 3.1419526
#define s(r) pi*r*r
int main()
double r,s;
printf("請輸入圓的半徑\n");
scanf("%lf",&r);
s=s(r);
printf("圓的面積為: %lf",r);
return 0;
以上就是帶引數的巨集定義。
很顯然帶引數的巨集定義在計算的時候,不必做更多的計算宣告,就可以直接的套用,它更加適合於那些需要大量使用該公式的程式中,相反如果程式中僅僅使用一次,該公式的話,不帶引數的巨集定義更加高效。
c 語言中的巨集定義
巨集定義 巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括 巨集定義 檔案包含 條件編譯 1.不帶引數的巨集定義 巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的 符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨...
C語言中的巨集定義
下列c 中包含兩種巨集定義,例如 include define max connection 1000 define mng port 5000 define min a,b a b a b define max a,b a b a b int main 方法1 gcc e 引數預編譯 gcc e ...
C語言中的巨集定義
c語言中的巨集定義 c語言中的巨集定義也叫做預處理命令,預處理命令是c語言本身的組成部分,不能直接對它們進行編譯。1.基本概念 1 預處理不是c語句,是在編譯前進行的 2 預處理功能主要用於下3種情況 巨集定義 檔案包含 條件編譯 3 巨集是在編譯前進行的,程式不能直接對它們進行編譯,由預處理程式先...