警告:初始化使得指针来自整数而没有强制转换

时间:2013-09-04 02:34:42

标签: c pointers

我会保持简单:

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

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

以下是我的称呼方式:

struct dnode *newnode = dnode_create();

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

1 个答案:

答案 0 :(得分: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。它(无参数)和空参数列表(参数数量不确定)之间存在细微差别。如果你真的想要一个无参数函数,你应该使用前者。