Написание кода c, компиляция gcc. Я использую глобальный массив в main.c и menu.c, в основном не ожидается. Но в menu.c хорошо работает. В чем разница.определение глобальных переменных, получение различных результатов в основном
Глобальные TXT_STRINGS массив, определенные в combo_strings.c
combo_strings.c
#ifndef COMBO_STRINGS_C_
#define COMBO_STRINGS_C_
//array defined here
extern const unsigned char * TXT_STRINGS[50][3]={
{" KAPI SiFRESiNi GiRiN»","ENTER THE DOOR ACCESS PIN»"},
{"AYARLAR SiFRESi GiRiN» ","ENTER SETTINGS PASSWORD»"},
....
#endif /* COMBO_STRINGS_C_ */
menu.c
//extern array declare
unsigned char * TXT_STRINGS[50][3];
function_x(){
trace_printf(TXT_STRINGS[1][0]); //printing console "AYARLAR SiFRESi GiRiN"
}
main.c
//extern array declare
unsigned char * TXT_STRINGS[50][3];
main(){
trace_printf("txt_str=%x",TXT_STRINGS[1][0]); //printing console "txt_str=20001f38"
}
Прочтите следующее: «Как использовать« extern »для обмена переменными между исходными файлами в C?» (Https://stackoverflow.com/questions/1433204/how-do-i-use-extern-to- доля-переменные-между-источник -файлы-в-C). – WhozCraig
'extern type variable_name = ...' просто не имеет никакого смысла. – Lundin
Вы получите *** множественную ошибку определения *** в коде, показанном в сообщении. Это связано с тем, что в одном файле вы используете 'extern const unsigned char *', а затем в другом вы используете 'unsigned char *'. Вы отказались от 'const'. Другая проблема заключается в том, что тип для строковых литералов не является 'unsigned char *', это 'char *'. Обе эти проблемы предотвратят чистую компиляцию. – ryyker