觀察下列兩種寫法有什麼區別
#define pint int *
typedef int * sint;
首先我們有乙個需要注意:
#define 巨集常量是在預編譯階段進行簡單替換。
對typedef而言,typedef 的真正意思是給乙個已經存在的 資料型別(注意:是型別不是變數)取乙個別
名,而非定義乙個新的資料型別。
區別:
1、define只是簡單的替換,將**中有pint的字樣替換成int *,而typedef則是給型別 int * 起乙個別名。
做如下例項:
#include #define pint int *
typedef int * sint;
void main()
通過監視器不難看出
我們定義的a是int*指標型別,而a則是int型,這就是define的簡單替換,只是換掉pint的位置換上int *,此時int *中*號跟第乙個a結合在一起,而不是和int型別結合,所以編譯器認定a是指標a2是整型變數。相信不能理解b與b2都是int *型,因為sint代表的int *這個型別。從意義上兩者是不同的。 2.
這裡我們在用const在加深一下,看看const修飾情況。
#include #define pint int *
typedef int * sint;
void main()
這裡通過監視器以確認
其中b) 編譯出錯,a)不會出錯,因為在預編譯的時候 int被替換為 int.
而 unsigned int i = 10;語句是正確的。但用 typedef 取的別名不支援這種型別擴充套件。
4、另外 typedef static int int是不行的typedef是儲存類關鍵字static也是儲存類關鍵字,不允許兩個一起用
define與const的區別
define 定義的其實是乙個字面常量的名字,在程式中可以把這個名字等價於字面常量使用,在編譯時會被編譯器替換為該字面常量。使用這種方式,只能達到提高程式可讀性的效果,但是安全性不能得到保證。從const 語句的語法格式可以看出,const 語句支援為常量指定型別,編譯器在編譯 時將其型別進行安全檢...
const 與 define的區別
在c程式中,const的用法主要有定義常量 修飾函式引數 修飾函式返回值等3個用處 在c 程式中,它還可以修飾函式的定義體,定義類中某個成員函式為恆態函式,即不改變類中的資料成員 1 const 有資料型別,而巨集沒有資料型別,編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢...
const與define的區別
const與define的區別 1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行型別檢查。3 儲存方式不同 define巨集僅僅是...