C 警告:赋值从整数生成指针而不进行强制转换
这是一个很常见的问题,但我还没有得到答案,所以再问一遍 我将结构器定义为:C 警告:赋值从整数生成指针而不进行强制转换,c,linux,C,Linux,这是一个很常见的问题,但我还没有得到答案,所以再问一遍 我将结构器定义为: struct f_lock{ int x; struct f_lock *next; }; 然后说我有一个函数: struct f_lock *new_node() { struct f_lock *new_f_lock; ..... return new_f_lock; } struct f_lock *new_f_lock; ne
struct f_lock{
int x;
struct f_lock *next;
};
然后说我有一个函数:
struct f_lock *new_node()
{
struct f_lock *new_f_lock;
.....
return new_f_lock;
}
struct f_lock *new_f_lock;
new_f_lock = new_node(); //This line gives the error warning:assignment makes pointer from integer without a cast
我从另一个函数调用它:
struct f_lock *new_node()
{
struct f_lock *new_f_lock;
.....
return new_f_lock;
}
struct f_lock *new_f_lock;
new_f_lock = new_node(); //This line gives the error warning:assignment makes pointer from integer without a cast
我非常感谢你的帮助
谢谢您是否也收到了函数“new_node”的错误
隐式声明
?因为在这种情况下,您可能忘记在调用它的模块中声明new\u node
。(如果没有收到该错误,请使用-Wall
重新编译以打开更多警告。)
警告消息的解释:如果未正确声明
new\u node
,编译器将假定它返回int
,这是一种默认返回类型(出于历史原因)。我似乎记得得到了这一点(相当误导)有一次,当我忘记将函数声明为使用void
时,出现了一条错误消息,这在c(但不是c++)中对于没有参数的函数是必需的:
struct f_lock *new_node()
{
struct f_lock *new_f_lock;
.....
return new_f_lock;
}
应该是:
struct f_lock *new_node(void)
{
struct f_lock *new_f_lock;
.....
return new_f_lock;
}
您很可能没有在范围中声明
new\u node()
的原型。也就是说,你最好发布人们可以用来重现你的问题的代码。它不应该是函数f_lock*new_node()
而不是结构f_lock*new_node()
。原来的定义是正确的。如果没有typedef
,则类型的名称为struct f_lock
f_lock
本身未定义可能的重复,我无法获得错误,但可能就是这种情况。因为我没有相同的函数module@Juggler:将编译器警告设置到最大值几乎总是一个好主意。另请参阅GCC手册中的-Werror
,并充分利用它。