如何在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中编译并运行它),我不知道它是否是一个障碍
答案 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.c
,second.c
或您选择的其他C文件中:
char cmdval[128];
答案 3 :(得分:0)
在second.c
#include "global.h"
在extern char cmdval[128]
中定义global.h
。