[此“较长的解释”由 Mark Brader 提供。]
在早期 C 语言中,[对malloc的返回值] 进行类型转换并不常用。malloc()返回一个char *值,它可以作为=操作的一部分被隐式转换为所需的指针类型。(事实上,在非常早期的 C 语言中,甚至没有类型转换运算符,所有的转换都是隐式的。)
后来,指针类型的隐式转换被认为是不好的做法,语言因此改变,使得涉及指针的=操作需要在两边具有相同的类型。因此,所有的指针转换现在都需要显式类型转换。(在某些编译器中,旧式的隐式转换仍然有效,但会发出警告。)
再后来,随着 ANSI C 的到来,引入了void *类型,malloc()被更改为返回该类型,并且在涉及void *时,隐式指针转换又回到了语言中。
因此,那些看似冗余的类型转换被以下人群使用:- (a) 关心移植到所有 ANSI 之前的编译器,或
- (b) 认为隐式转换是不好的做法。
返回
关于此 FAQ 列表 关于 Eskimo 搜索 反馈 版权
由
托管