【C語言】define和typedef的區別
阿新 • • 發佈:2018-12-11
#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)替換。