头文件中的struct定义:type默认为'int'

时间:2014-10-27 11:26:33

标签: c struct kernel global-variables extern

我在头文件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.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;

我从未在头文件中使用变量定义。在线搜索并从少数来源获得此信息。无法找到问题所在。之后出现了很多其他错误,这些错误源于上述错误。

编辑包含正确的代码。

2 个答案:

答案 0 :(得分:3)

您忘记包含<stdlib.h>,并且编译器将int视为malloc()的默认返回值。

自C99以来,默认implicit int已被删除。无论如何,你应该总是包括必要的hesders以获得正确的原型。

答案 1 :(得分:3)

这是:

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

真的在文件级范围吗?你不能在C函数之外拥有类似的代码,但我希望有一个不同的错误信息。