char * malloc()的含义是什么?为什么不能编译?

时间:2017-07-13 08:14:08

标签: c

我正在阅读A Koenig的一本名为C Traps and Pitfalls的旧书,该书于1989年出版,就在第一个C标准之前。在其中,我找到了以下代码:

char *r, *malloc();
r = malloc(strlen(s) + strlen(t) + 1);

第一行无法正确编译; 我使用CodeBlocks与MinGW编译它,它给我以下错误信息:

||=== Build: Debug in beta (compiler: GNU GCC Compiler) ===|
C:\Users\ADMIN\Desktop\beta\beta\main.c||In function 'main':|
C:\Users\ADMIN\Desktop\beta\beta\main.c|9|error: conflicting types for 'malloc'|
C:\Program Files (x86)\CodeBlocks\MinGW\include\stdlib.h|356|note: previous declaration of 'malloc' was here|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

我学到了一些C,但我不知道" char * malloc()"以及编译器发出错误的原因。

1 个答案:

答案 0 :(得分:7)

char *malloc();

是K& R C函数声明。我们将其称为K& RC,因为它是由Kernighan和Ritchie在1980年左右出版的第一版 The C Programming Language 中描述的C语言。该声明称“malloc存在,返回{{ 1}}并且可能会也可能不会采用参数“。

1990年,第一个官方C标准出版。与K * R样式C相比,最大的改进之一是引入了函数原型,其中也可以声明参数的类型。另一个是char*类型的引入,因此也是void。自1990年以来,C头文件void *已对stdlib.h

发出以下声明
malloc

这与你的重新声明有不同的返回类型,因此错误。

你的书C陷阱和陷阱is 27 years old以及三个过时的标准(C90,C99,C11)。得到一本新书。