回答
定义是由预处理器(实际的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定义
- 3. 重新定义的typedef错误
- 4. 是一个typedef的定义吗?
- 5. Scala中的Typedef封闭定义
- 6. C++ typedef含义
- 7. typedef结构与结构定义
- 8. C++检查typedef是否已定义
- 9. 嵌套模板typedef - 类型定义
- 10. 如何为工会成员定义typedef
- 11. 如何用自定义值定义类型? (typedef,enum)
- 12. 在定义结构时避免“重定义typedef”警告
- 13. 实现仅在特定条件下定义的typedef
- 14. 使用@typedef来定义特定的函数类型
- 15. 如何使用的typeid获得其定义使用的typedef
- 16. C++的typedef静态函数指针:未定义的符号
- 17. 重新定义不同的基本类型=>的typedef
- 18. 不同类型的Typedef重定义(Emscripten SDL2 + OpenGL)
- 19. 表示使用UML在C++模板类中定义的typedef
- 20. 在两个第三方库中uint32的Typedef重新定义(C2371)
- 21. C typedef结构重定义,不同的基本类型
- 22. 的TypeDef结构在头文件中定义
- 23. 的typedef
- 24. 的typedef
- 25. 错误使用的typedef的typedef
- 26. 用C共享全局变量typedef定义重新声明
- 27. 你能查找typedef被定义在哪里吗?
- 28. 从模板类中提取typedef/using定义
- 29. 如何为tr1 :: unordered_map定义一个不绑定模板参数的宏/ typedef/etc?
- 30. “typedef sometype sometype”有什么意义?
可能你的意思是'#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