C - 头文件中的结构定义:类型默认为 'int'



我在头文件header.h中有一个结构声明和定义为:

#include <linux/slab.h>
struct hello{
    int a;
    char b;
};
extern struct hello *hello;

在文件1.c中,我有:

#include<header.h>
struct hello *hello;
hello=kmalloc(sizeof(struct hello), __GFP_REPEAT);
kfree(hello);    //just to check later if 'hello' -
hello=NULL;      //-is initialized or not.

在文件2.c中,我有:

#include<header.h>

结构变量hello用于file1.cfile2.c

但在编译时,我遇到了一个错误:

file1.c:3:1 error: type defaults to 'int' in declaration of 'hello' [-Werror=implicit-int]
file1.c:4:1 error: conflicting types for 'hello'
file1.c:3:16 note: previous declaration of 'hello' was here 
 extern struct hello *hello;

我从未在头文件中使用过变量定义。在网上搜索,从很少的来源得到了这个。找不到问题所在。在此之后,由于上述错误,还会出现许多其他错误。

已编辑以包含正确的代码

这是吗

hello=kmalloc(sizeof(struct hello), __GFP_REPEAT);

真的在这样的文件级范围内吗?你不能在C中的函数外有这样的代码,但我希望会有不同的错误消息。

您忘记包含<stdlib.h>,编译器假定intmalloc()的默认返回值。

自C99以来,默认的implicit int已被删除。在任何情况下,您都应该始终包括必要的hesder以获得正确的原型。

相关内容

  • 没有找到相关文章

最新更新