我在头文件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.c
和file2.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>
,编译器假定int
为malloc()
的默认返回值。
自C99以来,默认的implicit int
已被删除。在任何情况下,您都应该始终包括必要的hesder以获得正确的原型。