如何在C中创建外部字符数组?
我已经尝试了各种方法来定义,char cmdval[128]但它总是说undefined reference to 'cmdval'
我想在cmdval中放一个字符串在first.c文件中,并在其他second.c文件中使用它.我尝试添加一个但没有运气的global.h文件extern char cmdval[128].
更新:
global.h
extern char cmdval[128];
Run Code Online (Sandbox Code Playgroud)
first.c
#include "global.h"
char cmdval[128];
function(){
strcpy(cmdval, "a string");
}
Run Code Online (Sandbox Code Playgroud)
second.c
#include "global.h"
function(){
printf("%s \n",cmdval); //error
}
Run Code Online (Sandbox Code Playgroud)
失败:("未定义参考`cmdval'"
编辑:我在linux工作(编辑一个迷你OS xv6然后在qemu编译和运行它),我不知道它是否是一个障碍
Geo*_*rey 29
您需要在.h文件中声明它
extern char cmdval[128];
Run Code Online (Sandbox Code Playgroud)
然后在first.c中定义值;
char cmdval[128];
Run Code Online (Sandbox Code Playgroud)
然后包含你的.h文件的任何内容,只要它与first.o链接,就可以访问它.
详细说明,"extern"说,有一个外部变量,这将引用...如果你不在某处声明cmdval,cmdval永远不会存在,extern引用永远不会引用任何东西.
例:
global.h:
extern char cmdval[128];
Run Code Online (Sandbox Code Playgroud)
first.c:
#include "global.h"
char cmdval[128];
int main() {
strcpy(cmdval, "testing");
test();
}
Run Code Online (Sandbox Code Playgroud)
second.c:
#include "global.h"
void test() {
printf("%s\n", cmdval);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令编译:
gcc first.c second.c -o main
Run Code Online (Sandbox Code Playgroud)
或者首先制作.o文件并链接它们
gcc -c first.c -o first.o
gcc -c second.c -o second.o
gcc first.o second.o -o main
Run Code Online (Sandbox Code Playgroud)