在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.c
, second.c
或您选择的其他C文件中:
char cmdval[128];
在第二个
#include "global.h"
在global.h
定义extern char cmdval[128]
。