Подтвердить что ты не робот

Создать массив 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), я не знаю, является ли это барьером

4b9b3361

Ответ 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.