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
,并充分利用它。