папярэджанне: вызначэнне дадзеных не мае тыпу або захоўванне класа

У мяне ёсць файл global.h , які ўключаны ў многіх файлах у праекце і змяшчае агульныя загалоўкі. Адпаведнае змесціва файла прыводзяцца ніжэй:

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

It has been included in main.c and there is a warning corresponding to the following line in 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
Ці ёсць main.c на самой справе ўключаюць global.h ?
дададзена аўтар Kerrek SB, крыніца
Ці ёсць main.c на самой справе ўключаюць global.h ?
дададзена аўтар Kerrek SB, крыніца
дададзена аўтар Mike, крыніца
дададзена аўтар Mike, крыніца
дададзена аўтар Mike, крыніца
дзе вы вызначэння гэтай зменнай ??
дададзена аўтар Dayal rai, крыніца

10 адказы

Вы павінны вызначыць, як Int як

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

З вашага кода, яго няяўна вызначаецца як Int , такім чынам, папярэджанне.

І ехЬегп INT debug_level; не вызначэньне, а дэкларацыя.

2
дададзена

Вы павінны вызначыць, як Int як

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

З вашага кода, яго няяўна вызначаецца як Int , такім чынам, папярэджанне.

І ехЬегп INT debug_level; не вызначэньне, а дэкларацыя.

2
дададзена

Вы павінны вызначыць, як Int як

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

З вашага кода, яго няяўна вызначаецца як Int , такім чынам, папярэджанне.

І ехЬегп INT debug_level; не вызначэньне, а дэкларацыя.

2
дададзена

Вы павінны вызначыць, як Int як

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

З вашага кода, яго няяўна вызначаецца як Int , такім чынам, папярэджанне.

І ехЬегп INT debug_level; не вызначэньне, а дэкларацыя.

2
дададзена

Абвясьцеце зменную debug_level як знешні , калі ён ужо абвешчаны некаторыя дзе. Тады кампілятар будзе шукаць дэкларацыі аб іншых месцах таксама.

#ifdef DEBUG            
external int debug_level = 6;
#endif
1
дададзена

Абвясьцеце зменную debug_level як знешні , калі ён ужо абвешчаны некаторыя дзе. Тады кампілятар будзе шукаць дэкларацыі аб іншых месцах таксама.

#ifdef DEBUG            
external int debug_level = 6;
#endif
1
дададзена

Абвясьцеце зменную debug_level як знешні , калі ён ужо абвешчаны некаторыя дзе. Тады кампілятар будзе шукаць дэкларацыі аб іншых месцах таксама.

#ifdef DEBUG            
external int debug_level = 6;
#endif
1
дададзена

Абвясьцеце зменную debug_level як знешні , калі ён ужо абвешчаны некаторыя дзе. Тады кампілятар будзе шукаць дэкларацыі аб іншых месцах таксама.

#ifdef DEBUG            
external int debug_level = 6;
#endif
1
дададзена

Вы не можаце проста ўсталяваць зменную ў глабальнай вобласці бачнасці, вы на самой справе зрабіць вызначэнне , што адпавядае заяву у файле загалоўка:

#ifdef DEBUG            
int debug_level = 6;
#endif
1
дададзена

Вы не можаце проста ўсталяваць зменную ў глабальнай вобласці бачнасці, вы на самой справе зрабіць вызначэнне , што адпавядае заяву у файле загалоўка:

#ifdef DEBUG            
int debug_level = 6;
#endif
1
дададзена