1. 程式人生 > >【C語言】define和typedef的區別

【C語言】define和typedef的區別

#define是 巨集定義命令,#define DINT int相當於將程式碼中的int可以寫為DINT,DINT等價於int。typedef int TINT; 是型別定義,TINT型別的變數就是int型別的變數。

1.typedef int TINT; 和#define DINT int

 2.typedef char *SINT; 和#define PINT char*

結論:typedef 是型別定義,將資料型別重新命名,所以在經過typedef重新命名之後,SINT a,b;這句程式碼定義的就是兩個字元型的指標,相當於char *a;char *b;。而define只是程式碼替換,PINT a,b;這句程式碼定義的是一個字元型指標a,一個只是普通字元變數,相當於char *a;char b;。

關於define 巨集定義程式碼替換的例子。

#include <stdio.h>
#define MIN(x,y) (x)<(y)?(x):(y)

int main()
{
	int i=10;
	int j=15;
	int k;
	k=10*MIN(i,j);
	printf("%d\n",k);
	return 0;
}

 

除錯之後k的結果是15,而不是150。其中有一個過程是k=10*x<y?x:y,在這裡不是先計算MIN(x,y)裡的值,而是將其替換,先計算10*x。

#include <stdio.h>
#define N 3+1
#define Y(n) ((N+1)*n)

int main()
{
	int z;
	z=2*(N+Y(5+1));
	printf("%d\n",z);
	return 0;
}

 

關鍵步驟z=2*(3+1+((3+1+1)*5+1))=60,注意在替換Y(n)時,最後乘以n是直接用5+1替換n,不是(5+1)替換。