3

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

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

已经包含在main.c里面并且有对应于下面一行的warningmain.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(默认情况下)。

4

3 回答 3

2

你应该定义int

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

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

而且extern int debug_level;不是定义而是声明。

于 2013-05-24T12:38:13.940 回答
1

你不能只在全局范围内设置变量,你实际上已经做了一个与头文件中的声明相匹配的定义:

#ifdef DEBUG            
int debug_level = 6;
#endif
于 2013-05-24T12:37:15.260 回答
1

声明变量debug_level,就external好像它已经在其他地方声明了一样。然后编译器也会在其他地方寻找声明。

#ifdef DEBUG            
external int debug_level = 6;
#endif
于 2013-05-24T12:37:44.610 回答