回答
定義是由預處理器(實際的C編譯器前的程序運行),它的工作原理是取代所有的處理你編輯。
Typedef由c編譯器本身處理,並且是新類型的實際定義。
[
typdef
]允許您引入可能已經用其他方式聲明的類型的同義詞。如本例所示,新名稱與您想要的類型相同。
define
是c preprocessor macro,它只會取代您的代碼中的出現。
但是,您展示的特定示例對我來說似乎有點不可思議。也許你可以在你的問題中添加一些背景信息。
有沒有區別,因爲兩者都是非法的過程中忽略了過程中進行處理。
int*
不是一個宏的有效標識符,即使您放入一個空格,也不是int
,因爲它是關鍵字並且是保留的。即使您將其切換到您可能預期的#define char int*
,也會出於同樣原因失敗。
而且你不能重新定義類型char
,所以typedef
是胸圍。
的區別,你已經考慮到了法律的例子,是#define
是一個預處理指令。它只是在編譯階段之前進行文本替換。相反,typedef
定義了一個新類型,並且該新類型標識符像其他類型一樣遵守「規則」。
typedef將替代名稱分配給現有類型。即g: typedef unsigned long size_t
現在在代碼中,你可以用unsigned long long替換size_t unsigned long temp;與size_t temp相同;
'#define'是一個預處理指令。它使得編譯器遍歷源代碼,用替換字符串 (例如)替換每個出現的宏名稱。 #define PI 3.14159
您選擇的示例會導致編譯錯誤。
使用宏而不是typedef定義的類型別名具有未定義或重新定義的靈活性,而typedef不具有這種靈活性。這就是爲什麼你可能會看到以這種方式定義的類型別名。這既是一種弱點,也是一種優勢。使用常見名稱(例如UINT,DWORD或BOOL)定義其自己類型的C庫數量無數,並且在使用多個第三方庫時會引發許多問題。至少使用宏可以強制它們未定義,或檢查現有的定義;如果使用了typedef,那麼您可能會遇到符號衝突問題,從而難以集成此類代碼。
在C++中,通過將第三方代碼封裝在名稱空間中可以更好地解決問題,然後typedef仍然是輸入別名的更好解決方案。
- 1. 奇怪的typedef定義C++
- 2. typedef struct用於定義
- 3. 關於未定義的引用的typedef
- 4. Scala中的Typedef封閉定義
- 5. 重新定義的typedef錯誤
- 6. 重新定義派生類中的typedef?
- 7. 是一個typedef的定義嗎?
- 8. UInt32的在MacTypes.h重新定義的typedef從定義CFBase.h
- 9. C++ typedef含義
- 10. 找不到一個typedef定義
- 11. typedef結構體指針定義
- 12. C++檢查typedef是否已定義
- 13. 如何爲工會成員定義typedef
- 14. 嵌套模板typedef - 類型定義
- 15. 在typedef中定義結構struct
- 16. typedef結構與結構定義
- 17. typedef同義替換
- 18. 如何用自定義值定義類型? (typedef,enum)
- 19. 在定義結構時避免「重定義typedef」警告
- 20. 實現僅在特定條件下定義的typedef
- 21. 使用@typedef來定義特定的函數類型
- 22. Bool報告爲未定義。當添加typedef時; Bool已定義的錯誤
- 23. C++的typedef靜態函數指針:未定義的符號
- 24. 重新定義不同的基本類型=>的typedef
- 25. 如何使用的typeid獲得其定義使用的typedef
- 26. 重新定義的typedef是C11的功能
- 27. 指定自定義默認缺失者用typedef
- 28. 如何定義一系列浮點數的typedef?
- 29. 在兩個第三方庫中uint32的Typedef重新定義(C2371)
- 30. C typedef結構重定義,不同的基本類型
可能你的意思是'#define char int *' – Curd 2010-07-23 08:31:06
已經有許多重複的東西,例如[是typedef和#define在c中是一樣的嗎?](http://stackoverflow.com/questions/1666353/is-typedef-and-define-the-same-in-c) - 可能是一個作業問題? – 2010-07-23 08:40:38
也檢查這一個 - http://stackoverflow.com/questions/3263252/is-typedef-just-a-string-replacement-in-code-or-somethings-else – KedarX 2010-07-23 08:52:16