Typedef对于可移植名称,标记名称(typedef struct foo Foo;)和保持复杂(函数)声明可读(typedef int
(*cmpfunc)(const void *, const void *);)非常有用.
但是在C中是否存在真正需要typedef的情况?通过简单地写出派生类型,你无法做到这一点.
澄清一点:我的意思是语言用户,而不是实施者.整个stdint.h是第二类的一个很好的例子.
感谢您的输入.我想我可以总结为:
(u)intN_t各种类型.va_arg宏时可能需要typedef ,但我怀疑你在实践中会遇到这些衍生类型.sch*_*hot 15
谢谢大家的回答.我自己看了一些,在C99中发现了这个,J.2未定义的行为:
在下列情况下,行为未定:[...]
va_arg宏的类型参数不是这样的,只需通过post fi xing*(7.15.1.1)就可以获得指向该类型对象的指针.
因此,当您想要传递/提取复杂的派生类型时va_arg,int (*)[]您需要typedef将此类型转换为可能的(更新/更正)的内容:
typedef int (*intarrptr)[4];
intarrptr x = va_arg(ap, intarrptr);
由于很难找到并且实际有用的案例,因此人们可能得出结论认为它不是一个强有力的论据typedef.
jam*_*lin 14
根据typedef定义,A 是别名.因此,您始终可以使用实际类型替换别名.否则它不会是别名.
这并不意味着避免typedef会是一个好主意.