这个问题可能源于我对编译器的一个误解,但是这里有… 在第一版K&R(第xi页)的前言中可以find以下的说明: 操作系统, C编译器和基本上所有的UNIX应用程序(包括用来编写本书的所有软件)都是用C语言编写的。 (我的重点) 以下是我不明白的事情:C编译器在编译任何C代码之前是否必须进行编译? 如果这个C编译器是用C语言编写的,不会编译它需要一个已经存在的C编译器?! 这个无限回归难题(或鸡与蛋问题)的唯一出路是用K&R编写的用C编写的C编译器实际上是用一个已经存在的用C以外的C编译器编译的用C编写的C编译器代替后者。 还是我完全脱落?
今天我到了C编程语言(第二版Brian W. Kernighan&Dennis M. Ritchie)的第167页,发现作者说我必须投入malloc 。 这是书中的一部分: 7.8.5存储pipe理 函数malloc和callocdynamic获取内存块。 void *malloc(size_t n) 返回一个指向未初始化存储的n个字节的指针,如果请求不能满足,则返回NULL。 void *calloc(size_t n, size_t size) 为指定大小的n个对象返回一个指向足够空闲空间的指针;如果请求不能满足,则返回NULL。 存储初始化为零。 malloc或calloc返回的指针对于所讨论的对象具有正确的alignment方式,但是必须将其转换为适当的types,如 int *ip; ip = (int *) calloc(n, sizeof(int)); 我已经知道malloc (和它的系列)返回typesvoid * ,并有很好的解释为什么不投出malloc 。 但是我的问题是:为什么这本书说我应该投它?