在C中创建extern char数组

时间:2011-10-06 06:12:49

标签: c char extern

如何在C中创建外部字符数组?

我尝试了各种方法来定义char cmdval[128],但它总是说undefined reference to 'cmdval'

我想在first.c文件中的cmdval中放一个字符串,并在其他second.c文件中使用它。我尝试使用global.h添加extern char cmdval[128]文件,但没有运气。

更新:

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
}

失败:(“未定义引用`cmdval'”

编辑: 我在linux上工作(编辑一个迷你OS xv6,然后在qemu中编译并运行它),我不知道它是否是一个障碍

4 个答案:

答案 0 :(得分:29)

您需要在.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

答案 1 :(得分:3)

Extern并不意味着在某个地方找到它,它将变量linkage更改为external,这意味着无论您声明变量多少次,它都会引用相同的内容

e.g。这些引用c(不是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

答案 2 :(得分:2)

您应该有一个编译单元,您可以在其中定义 cmdval变量。 extern关键字仅声明变量存在,它不定义它。

将以下行添加到first.csecond.c或您选择的其他C文件中:

char cmdval[128];

答案 3 :(得分:0)

second.c

#include "global.h"

extern char cmdval[128]中定义global.h