4

我将保持简单:

这是我构建的函数,它将创建一个新的 dnode:

struct dnode *dnode_create() {
        return calloc(1, sizeof(struct dnode));
    }

这就是我所说的:

struct dnode *newnode = dnode_create();

我不明白这与整数有何关系?

4

1 回答 1

11

当您尝试使用它时,要么callocdnode_create没有原型。

这意味着它假定int返回类型,因此您的警告消息。

为确保原型可见calloc,请包含stdlib.h头文件。

如果是dnode_create,您必须自己做,方法是:

  • 在使用之前定义函数(在给定的源文件中);或者
  • 在使用原型之前声明它。

对此进行扩展,假设它们在单个翻译单元(简单地说,源文件)中以这种方式排序,这两种方法都将起作用。第一的:

struct dnode *dnode_create (void) {         // declare & define
    return calloc(1, sizeof(struct dnode));
}
:
{   // inside some function
    struct dnode *newnode = dnode_create(); // use
}

或者:

struct dnode *dnode_create (void);          // declare
:
{   // inside some function
    struct dnode *newnode = dnode_create(); // use
}
:
struct dnode *dnode_create (void) {         // define
    return calloc(1, sizeof(struct dnode));
}

您还会注意到,我void在上述两种情况下都使用了函数声明。这(无参数)和空参数列表(不确定数量的参数)之间存在细微差别。如果你真的想要一个无参数的函数,你应该使用前者。

于 2013-09-04T02:36:31.657 回答