在C中创建extern char数组

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

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

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

更新:

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编译并运行它),我不知道它是否是一个障碍

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

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

例如,这些在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 

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

first.c下行放在first.csecond.c或您选择的其他C文件中:

 char cmdval[128]; 

在第二个

 #include "global.h" 

global.h定义extern char cmdval[128]