Questions tagged «kernighan-and-ritchie»

1
为什么“ The C Programming Language”这本书说我必须转换malloc?
今天,我到达了C编程语言(第二版Brian W. Kernighan和Dennis M. Ritchie)的第167页,发现作者说我必须强制转换。这是本书的一部分:malloc 7.8.5存储管理 函数malloc和calloc动态获取内存块。 void *malloc(size_t n) 返回一个指向n字节未初始化存储的指针,如果无法满足请求,则返回NULL。 void *calloc(size_t n, size_t size) 返回一个指向足够的可用空间的指针,该指针用于指定大小的n个对象的数组;如果无法满足请求,则返回NULL。存储初始化为零。由malloc或calloc返回的指针与所讨论的对象具有正确的对齐方式,但必须将其强制转换为适当的类型,如 int *ip; ip = (int *) calloc(n, sizeof(int)); 我已经知道malloc(及其家族)返回类型void *,并且有很好的解释为什么不强制转换malloc。 但是我的问题是:为什么这本书说我应该抛弃它?

13
##预处理程序运算符和陷阱需要考虑哪些应用?
正如我之前的许多问题中提到的那样,我正在研究K&R,目前正在使用预处理器。##预处理程序运算符是更有趣的事情之一,这是我以前学习C的任何尝试中从未知道的事情。根据K&R: 预处理程序运算符## 提供了一种在宏扩展过程中连接实际参数的方法。如果替换文本中##的参数与a相邻,则该参数将被实际参数替换, ##并删除空格和周围的空白,然后重新扫描结果。例如,宏paste 将其两个参数串联在一起: #define paste(front, back) front ## back 因此paste(name, 1)创建令牌 name1。 有人将如何以及为什么在现实世界中使用它?使用它的实际例子是什么,是否有需要考虑的地方?

5
函数声明与原型的替代(K&R)C语法
C使用'K&R'样式函数声明,此语法有什么用? int func (p, p2) void* p; int p2; { return 0; } 我能够在Visual Studios 2010beta中编写此代码 // yes, the arguments are flipped void f() { void* v = 0; func(5, v); } 我不明白 这种语法有什么意义?我可以写: int func (p, p2) int p2; { return 0; } // and write int func (p, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.