我在 The UNIX Programming Environment 中找到了这个代码块(出版版权日期为 1984 年)。
chp8->hoc3->symbol.c
char *emalloc(n) /* check return from malloc */
unsigned n;
{
char *p, *malloc();
p = malloc(n);
if (p == 0)
execerror("out of memory", (char *) 0);
return p;
}
什么意思:
char *p, *malloc();
真的很奇怪吗?
最佳答案
char *p, *malloc();
正在声明一个指向 char
的指针名为 p
和一个名为 malloc
的函数(在这些 K&R C 的日子里,void*
不存在)。
这是老 Kernigan & Ritchie C (从 1980 年代开始)。从那时起,C 标准有了显着的发展。当前的 C 标准是 C11 , 及其之前的版本 C99应用非常广泛。
今天不要这样写代码。 malloc
在 <stdlib.h>
中定义可能是一些 inlined function有(但通常没有)。
您的函数通常按惯例称为 xmalloc
今天;你需要添加
#include <stdlib.h>
#include <stdio.h>
在文件的开头(因为 malloc
和 exit
在 <stdlib.h>
中声明,EXIT_FAILURE
在那里定义,并且 perror
在 <stdio.h>
中声明),并且会被定义为
void* xmalloc(size_t sz) {
void* p = malloc(sz);
if (!p) {
perror("malloc");
exit(EXIT_FAILURE);
};
return p;
}
并在你的一些 header 中声明
void* xmalloc(size_t sz);
我建议阅读一本较新的书。在 Linux 上,至少考虑 Advanced Linux Programming书(2001 年出版)。
如果使用 GCC,您可以添加 function attributes到你的函数声明。
关于对 C 中的这个语句感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21250216/