const與define的一點區別

2021-08-08 21:12:27 字數 1234 閱讀 6354

觀察下列兩種寫法有什麼區別

#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巨集僅僅是...