Function Pointer cast at declaration

While looking for informations about calloc, I founded in the source code:

char *malloc();

in the calloc function.

Does it cast the void *malloc(size_t) into a function pointer returning a char* ?

This syntaxe does not compile for me.


In the old days, before ANSI C provides void * as the generic pointer type, char * was used for this purpose.

The code is from the source of Version 7 Unix, it's released in 1979 (before ANSI C ).

And this is the reason it's necessary to cast the return value of malloc() in the old pre-ANSI code.

Reference: C FAQ


That's from some very old source code. You're looking at code from UNIX Version 7, which was released in 1979. The C language has changed substantially since then.

It's not a cast; it's a function declaration. A cast consists of a parenthesized type name followed by an expression, such as (int)foo .

Furthermore, it's an old-style function declaration, a non-prototype that doesn't specify the type(s) of the parameter(s). (It's still valid syntax, though.)

It declares that malloc is a function returning a result of type char* . (It doesn't define the malloc function; that has to be done elsewhere.)

In modern C (since 1989), malloc return a result of type void* and has a single parameter of type size_t , so the declaration would be:

void *malloc(size_t);

but that declaration is provided by the standard <stdlib.h> header, so there's no need to provide the declaration yourself.

It's legal to have function declarations inside other functions, but it's seldom a particularly good idea.

链接地址: http://www.djcxy.com/p/28478.html

上一篇: 什么确实在铸造一个指针?

下一篇: 函数指针在声明时强制转换