Создать массив extern char в C
Как создать внешний массив символов в C?
Я пробовал различные способы определения char cmdval[128]
, но он всегда говорит undefined reference to 'cmdval'
Я хочу поместить строку в cmdval в файл first.c
и использовать ее в другом файле second.c
. Я попытался добавить файл global.h
с extern char cmdval[128]
, но не повезло.
UPDATE:
global.h
extern char cmdval[128];
first.c
#include "global.h"
char cmdval[128];
function(){
strcpy(cmdval, "a string");
}
second.c
#include "global.h"
function(){
printf("%s \n",cmdval); //error
}
FAIL:( "undefined ссылка на` cmdval '"
EDIT:
Я работаю в Linux (редактируя мини-ОС xv6, затем компилируя и запуская его в qemu), я не знаю, является ли это барьером
Ответы
Ответ 1
Вам нужно объявить его в файле .h
extern char cmdval[128];
И затем определите значение в first.c;
char cmdval[128];
Затем все, что содержит ваш .h файл, при условии, что оно связано с first.o, будет иметь к нему доступ.
Чтобы уточнить, "extern" говорит, есть внешняя переменная, которая будет ссылаться... если вы не объявите где-нибудь cmdval, cmdval никогда не будет существовать, а ссылка extern никогда не будет ссылаться на что-либо.
Пример:
global.h:
extern char cmdval[128];
first.c:
#include "global.h"
char cmdval[128];
int main() {
strcpy(cmdval, "testing");
test();
}
second.c:
#include "global.h"
void test() {
printf("%s\n", cmdval);
}
Вы можете скомпилировать это, используя:
gcc first.c second.c -o main
Или сначала сделайте файлы .o и соедините их
gcc -c first.c -o first.o
gcc -c second.c -o second.o
gcc first.o second.o -o main
Ответ 2
У вас должен быть блок компиляции, в котором вы определяете переменную cmdval
. Ключевое слово extern
объявляет только, что переменная существует, она не определяет ее.
Поместите следующую строку в first.c
, second.c
или в другой файл C по вашему выбору:
char cmdval[128];
Ответ 3
Extern
не означает найти его где-то, он изменяет переменную linkage
на external
, что означает, что независимо от того, сколько раз вы объявляете переменную, она ссылается на одно и то же.
например. Эти ссылки одно и то же в c (не С++), по умолчанию глобальная переменная external
.
external char cmdval[128];
char cmdval[];
char cmdval[128];
Проблема заключается в том, что вы сначала компилируете их в .o, а затем связываете их .o вместе.
gcc -c first.c second.c
gcc -o first.o second.o
или
gcc first.c second.c
Ответ 4
В second.c
#include "global.h"
define extern char cmdval[128]
в global.h
.