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);
}
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn5UNFpnTxkkeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3QTN1EDM0gTMxMjMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
接下來我們看這個例子
#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類型。