我在头文件header.h
中的结构声明和定义为:
#include <linux/slab.h>
struct hello{
int a;
char b;
};
extern struct hello *hello;
在file1.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.
在file2.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;
我从未在头文件中使用变量定义。在线搜索并从少数来源获得此信息。无法找到问题所在。之后出现了很多其他错误,这些错误源于上述错误。
答案 0 :(得分:3)
您忘记包含<stdlib.h>
,并且编译器将int
视为malloc()
的默认返回值。
自C99以来,默认implicit int
已被删除。无论如何,你应该总是包括必要的hesders以获得正确的原型。
答案 1 :(得分:3)
这是:
hello=kmalloc(sizeof(struct hello), __GFP_REPEAT);
真的在文件级范围吗?你不能在C函数之外拥有类似的代码,但我希望有一个不同的错误信息。