- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
第二版。我正在查看他们在第 6.6 节中的哈希表示例。我发现完整的源代码被转录了 here .这是我困惑的部分:
struct nlist *np;
if((np=lookup(name))==NULL){
np=(struct nlist *)malloc(sizeof(*np));
为什么在最后一行强制转换为 (struct nlist *)
?我可以删除它而不会收到任何编译器警告。
我也很困惑
free((void *)np->def);
这些是否旨在以某种方式提高可读性?
最佳答案
转换 malloc
的结果在 C 的一些前 ANSI 方言中是必要的,并且在 K&R2(它涵盖了 1989 年 ANSI C 标准的语言)中保留了这种用法。
本书的勘误表中提到了这一点。我通过 Dennis Ritchie's home page 看到了它,目前不可用(我希望 AT&T 没有永久删除它),但我找到了它 elsewhere :
142(§6.5, toward the end): The remark about casting the return value of malloc ("the proper method is to declare ... then explicitly coerce") needs to be rewritten. The example is correct and works, but the advice is debatable in the context of the 1988-1989 ANSI/ISO standards. It's not necessary (given that coercion of void * to ALMOSTANYTYPE * is automatic), and possibly harmful if malloc, or a proxy for it, fails to be declared as returning void *. The explicit cast can cover up an unintended error. On the other hand, pre-ANSI, the cast was necessary, and it is in C++ also.
关于c - 为什么 Kernighan 和 Ritchie 包含看似不必要的类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29836054/
jQuery attributeContainsPrefix [name^="value"] 对比 attributeStartsWith [name|="value"] 实际区别是什么? 最佳答案
在1.1部分在RFC 6749中,有四种角色:资源拥有者、资源服务器、客户端和授权服务器。 如果客户端和资源所有者是同一实体,OAuth 是否变得多余或不必要? 例如,我有一个封闭的 API 和一个面
我有一段代码,其中有一个带有保护子句的 raise 语句: def validate_index index # Change to SizeError raise ArgumentError
我看到了这篇文章( JPA Entity Lifecycle Events vs database trigger ),但它并没有像我在这里那样明确地询问: 当我插入 PK 值为 (null) 的行时
所以,我有一段代码看起来像 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2){ // Do something }
我是一名优秀的程序员,十分优秀!