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

Nob*_*ong 4 c pointers

我会简单地说:

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

struct dnode *dnode_create() {
        return calloc(1, sizeof(struct dnode));
    }
Run Code Online (Sandbox Code Playgroud)

以下是我称之为:

struct dnode *newnode = dnode_create();
Run Code Online (Sandbox Code Playgroud)

我不明白这涉及到整数?

pax*_*blo 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
}
Run Code Online (Sandbox Code Playgroud)

要么:

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));
}
Run Code Online (Sandbox Code Playgroud)

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