为什么我需要转换从函数返回的结构?
在一个文件中我有这样的:为什么我需要转换从函数返回的结构?
调用程序是:
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
mynode=example();
}
节点本身是在的defs.h文件我这里不显示定义。 我用gcc编译得到的警告是“调用例程中的赋值使得整型指针没有转换”。
更改为mynode =(struct node *)example();删除该警告。该例程在任何情况下都有效,但我不明白为什么我会收到警告。
在调用example
的文件中,返回类型example
未知,所以假定返回一个int,您将其分配给struct node *
。因此警告。
您应该在调用文件中声明example
的原型(在调用函数之前键入struct node* example(void);
)或者(更好地)创建名为example.h的头文件,在那里键入原型,然后包含调用文件中的头文件(即,输入#include "example.h" at the top). The header file thus defines the interface of the file where
示例),并且使用函数的文件可以包含头文件,从而确保所有类型匹配,并删除任何编译器警告。
这是问题所在,我有一个头文件但没有包含它。 – Rob
难道你没有声明struct node* example(void)
的原型,编译器认为它返回int
?
'##包括“defs.h”'? –
@JamesMorris - 是的,我包含了defs文件,但忘记了我的头文件 – Rob