2013-05-24 3 views
3

프로젝트의 여러 파일에 포함되어 일반 헤더를 포함하는 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 (기본적으로)이라고 가정하기 때문에 잘 작동합니다.

+1

어디에서이 변수를 정의합니까 ?? –

+0

'main.c'는 실제로'global.h'을 포함합니까? –

+0

[Strange GCC 경고 : 스토리지 클래스 및 유형] (http://stackoverflow.com/questions/7703260/strange-gcc-warning-on-storage-class-and-type) – Mike

답변

2

당신은 암시 적으로 int로 정의 코드, 따라서 경고와 마찬가지로 int

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

을 정의해야합니다.

extern int debug_level;은 정의가 아니며 선언입니다.

1

당신은 단지 전역 범위의 변수를 설정할 수 없습니다, 당신은 실제로 헤더 파일에 선언 일치하는 정의하게 있습니다 external로 변수 debug_level를 선언

#ifdef DEBUG    
int debug_level = 6; 
#endif 
1

그것을 경우 이미 다른 곳에서 선언되었습니다. 그런 다음 컴파일러는 다른 장소에서도 선언문을 찾습니다.

#ifdef DEBUG    
external int debug_level = 6; 
#endif