天天看點

宏定義與使用者自定義類型隻替換,不計算

1.宏定義

當你#define PI 3.14後,往後你就可以用PI來代替3.14的一系列工作了。

#include <stdio.h> 
#define PI 3.14

int main(){
	double s;
	int r=2;
	s = 2*PI*r;
	printf("半徑為2的圓周長為%f\n",s);
}
           
宏定義與使用者自定義類型隻替換,不計算

接下來我們看這個例子

#include <stdio.h> 
#define ADD(x) x+x

int main(){
	int n;
	n = 20*ADD(2);
	printf("%d\n",n);
}
           

很多人會認為是2+2=4, 4*20=80,結果是80.

然而實際上20 *2+2=42

原因

#是預編譯操作,即為在編譯工作執行之前進行的,

以例子來看#define僅僅是替換了x+x并沒有進行計算x+x

隻替換,不計算

宏定義與使用者自定義類型隻替換,不計算

都是一些很簡單的栗子hhh

宏定義使用為了:

1.增強文檔可讀性

2.提高程式可維護性

//簡單講下面這個表示螢幕上的一個點,由其點坐标組成
typedef struct POINT 
{
	int row;
	int col;
}POINT;
//螢幕坐标數值取值範圍: 行範圍為1到25
int row;
scanf("%d",&row);
if (row < 1 || row > 25)
...

           

比如說這個代碼超級長,戰線拉得超級長,

後期可能會莫名其妙出現25或者1,會讓人腦闊疼對吧。

是以

#define MIN_ROW 1
#define MAX_ROW 25
           

後期判斷語句可以寫成

if (row < MIN_ROW || row > MAX_ROW)
//很容易懂了呀
           

如果要改取值範圍,比如變成1-30這種,

不用在程式中找25改,直接改一處即可。

2.使用者自定義類型

簡單的typedef

typedef int INTEGER

之後,就可以

int a; 相當于 INTEGER a;

較複雜的typedef

1.typedef char *a;

即為 産生了一個新資料類型,他的名字叫做a

a類型等價于char * 類型

a p; 即為 char *p

2.typedef int ai[10];

即ai b; 等價于int b[10];

複雜一點 ai c[20]; 等價于 int c[20][10];

3.#define和typedef的差異

emm簡單

#define GY char*

typedef char* gy;

看着

GY a1,b1,c1;

gy a2,b2,c2;

再看

GY a1,b1,c1 <=> chara1,b1,c1

僅僅a1為char * 類型,b1,c1為char類型

再看

gy a2,b2,c2;這裡a2,b2,c2;這三個全是char類型。

繼續閱讀