任何人都可以解释
之间的区别#define int* char
和
typedef int* char;
答案 0 :(得分:5)
没有区别,因为两者都是非法的。
int*
不是宏的有效标识符,即使您放入空格,int
也不是,因为它是关键字并保留。即使您将其切换到可能的预期#define char int*
,它也会因同样的原因而失败。
您无法重新定义char
类型,因此typedef
是一个半身像。
如果您给出合法的示例,那么差异是#define
是预处理指令。它只在编译阶段之前进行文本替换。相反,typedef
定义了一种新类型,而新类型标识符就像任何其他类型一样尊重“规则”。
答案 1 :(得分:2)
定义由预处理器(在实际的c编译器之前运行的程序)处理,其工作方式类似于在编辑器中替换all。
Typedef由c编译器本身处理,是新类型的实际定义。
答案 2 :(得分:2)
答案 3 :(得分:1)
#define
是预处理程序指令。在编译之前,文本int*
将更改为char
。这是你通常不做的事情。
Typedef是一种语言指令。它定义了一种新类型,如Forlan07所述。
你的例子在任何一种形式都非常糟糕。幸运的是,正如GMan指出的那样,这是非法的。
答案 4 :(得分:0)
[
typdef
]允许您为可能以其他方式声明的类型引入同义词。新名称将等同于您想要的类型,如此示例所示。
define
是c preprocessor macro,只会替换代码中的出现。
然而,你所展示的特定例子对我来说似乎有点奇怪。也许你可以在你的问题中添加一些背景信息。
答案 5 :(得分:0)
typedef为现有类型指定替代名称。例如: typedef unsigned long size_t
现在在代码中,您可以使用size_t替换unsigned long 无条件的长温;与size_t temp相同;
'#define'是一个预处理程序指令。它使编译器遍历源代码,用replacement-string替换每次出现的宏名称 例如#define PI 3.14159
您选择的示例将导致编译错误。
答案 6 :(得分:0)
使用宏而不是typedef定义的类型别名可以灵活地定义或重新定义,而typedef则不行。这就是为什么您可能会看到以这种方式定义的类型别名。这既是一个弱点,也是一个优势。例如,使用UINT,DWORD或BOOL等通用名称定义自己类型的C库的数量是无数的,并且在使用多个第三方库时会导致许多问题。至少使用宏可以强制它们未定义,或检查现有定义;如果使用typedef,则可能存在符号冲突问题,而不是难以集成此类代码。
在C ++中,通过将第三方代码封装在命名空间中可以更好地克服这个问题,然后typedef仍然是键入别名的更好解决方案。