表示我的問題,一種玩具,代碼如下:需要一個 「多重定義」 一種變通方法錯誤
stuff.h:
#ifndef STUFF
#define STUFF
int a;
int testarr[]={1,2,3};
#endif
fcn.h:
#include "stuff.h"
int b[]={5,6,7};
void fcn();
主.H:
#include "stuff.h"
#include <stdio.h>
fcn.c:
#include "main.h"
void fcn() {
printf("Hello\n");
}
main.c中:
#include "main.h"
#include "fcn.h"
int main() {
fcn();
printf("HI\n");
}
試圖編譯失敗:
/g/pe_19976/fcn_2.o:(.data+0x40): multiple definition of `testarr'
/g/pe_19976/main_1.o:(.data+0x40): first defined here
做一些閱讀後,我認識到限定在頭文件陣列testarr
是問題。但事實是,在我的真實代碼中,有幾個文件需要訪問testarr
,它需要在任何地方都有相同的賦值。我想我可以把它放在main.h
(?),但即使這可以工作,在我的真實代碼中,它邏輯上屬於stuff.h
。我如何解決這個難題?
順便說一句,基於我發現的其他東西,我試圖將testarr
定義爲extern
,但遇到同樣的問題。