警告:数据定义没有类型或存储类

时间:2013-05-24 12:34:41

标签: c gcc warnings compiler-warnings gcc-warning

我有一个文件global.h,它包含在项目中的许多文件中,并包含常规标题。文件的相关内容如下:

#define DEBUG
#ifdef DEBUG
extern int debug_level;
#endif

它已包含在main.c中,并且警告对应main.c

中的以下行
#ifdef DEBUG            
debug_level = 6;   //compiler generates warning corresponding to this line.
#endif

编译器发出的警告消息是:

src/main.c:14:1: warning: data definition has no type or storage class [enabled by default]
src/main.c:14:1: warning: type defaults to ‘int’ in declaration of ‘debug_level’ [enabled by default]

我不明白我做错了什么。令人惊讶的是程序工作正常,因为我认为编译器假定该数字是int(默认情况下)。

3 个答案:

答案 0 :(得分:2)

您应该将int定义为

#ifdef DEBUG            
int debug_level = 6;   //define as int
#endif

使用您的代码,其隐式定义为int,因此警告。

extern int debug_level;不是定义,而是宣言。

答案 1 :(得分:1)

您不能只在全局范围内设置变量,实际上您已经在头文件中创建了与声明匹配的定义

#ifdef DEBUG            
int debug_level = 6;
#endif

答案 2 :(得分:1)

如果已将变量debug_level声明为其他地方,则将其声明为external。然后编译器也会在其他地方查找声明。

#ifdef DEBUG            
external int debug_level = 6;
#endif