C 警告:初始化将指针从整数转换为不带强制转换的整数
我只想把事情简单化: 以下是我构建的函数,它将创建一个新的dnode:C 警告:初始化将指针从整数转换为不带强制转换的整数,c,pointers,C,Pointers,我只想把事情简单化: 以下是我构建的函数,它将创建一个新的dnode: struct dnode *dnode_create() { return calloc(1, sizeof(struct dnode)); } 我这样称呼它: struct dnode *newnode = dnode_create(); 我不明白这是怎么涉及integer的?无论是calloc还是dnode\u create在您尝试使用它时都没有看到原型 这意味着它假定返回类型为int,因此会
struct dnode *dnode_create() {
return calloc(1, sizeof(struct dnode));
}
我这样称呼它:
struct dnode *newnode = dnode_create();
我不明白这是怎么涉及integer的?无论是
calloc
还是dnode\u create
在您尝试使用它时都没有看到原型
这意味着它假定返回类型为int
,因此会显示警告消息
要确保查看到calloc
的原型,请包括stdlib.h
头文件
如果是dnode\u create
,您必须自己完成,方法如下:
- 在使用之前定义函数(在给定的源文件中);或
- 在使用原型之前声明原型
您还会注意到,在上述两种情况下,我都在函数声明中使用了
void
。这(没有参数)和空参数列表(参数数量不确定)之间有细微的区别。如果你真的想要一个无参数的函数,你应该使用前者。lemme guess;使用visual studio?啊。C99去掉了隐式int,但gcc仍然允许。所以你的意思是,如果我切换到另一个编译器,它可能不会对此抱怨?可能是@LidongGuo的重复:这在两个方面是错误的。首先,它没有解决这个问题。第二,您从未在C中强制转换malloc的返回值。这没有任何好处,它实际上可以隐藏错误(这里遇到的错误就是这样发生的)。您建议引入一个更严重的错误来消除警告。我应该像(struct dnode*)一样使用calloc?@Nob,不,不要在C中使用malloc/calloc
,它可以隐藏某些细微的错误。相反,请确保在使用点定义了原型。“使用前声明原型”是什么意思?@Nob,请参阅更新。考虑到您包含了stdlib.h,这可能是您自己的功能。很抱歉,我仍然感到困惑。第一个不是和我的一样吗?或者我必须在花括号内使用它?
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));
}