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
}
FAIL :( "` cmdval 'への未定義の参照 "
編集:私はLinuxで作業しています(ミニOS xv6を編集してから、それをqemuでコンパイルして実行します)、それが障壁であるかどうかわかりません
.hファイルで宣言する必要があります
extern char cmdval[128];
そして、first.cで値を定義します。
char cmdval[128];
次に、first.oにリンクされている場合、.hファイルを含むすべてのファイルにアクセスできます。
詳しく説明すると、「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
definecmdval
変数を含むコンパイル単位が必要です。 extern
キーワード宣言のみ変数が存在することを定義しません。
次の行をfirst.c
、second.c
または任意の他のCファイルに入れます。
char cmdval[128];
second.c
#include "global.h"
定義extern char cmdval[128]
in global.h
同様に。