我未知的前任誰已經離開代碼。我嘗試使用其中的一些,但他的代碼看起來很不尋常。處理c文件中定義的變量而非頭文件
1.什麼他所做的是在沒有頭,但C文件定義的變量:variables.c
CHGR_CMD comand[MAX_COMANDS] __attribute__ ((section ("external")));
RAWDAT rawdat[MAX_RAWDAT] __attribute__ ((section ("external")));
SC_TEST *curr_test[NUMCHANS]; /* array of pointers to current testrec */
SC_TESTSETUP chparam[NUMCHANS] __attribute__ ((section ("external")));
SC_HOLDSTAT stats[NUMCHANS] __attribute__ ((section ("external")));
RAWDAT *bufs[NUMCHANS];
//FACTS control[NUMCHANS];
short ntest;
short new_dbuff;
short start_err;
short update_status;
long status_sent;
short load_done;
char h_lok; ....
2 init_vars()在其他C文件初始化上述變量:init_vars.c
memset((char *) rawdat,0 ,sizeof(rawdat));
memset((char *) curr_test,0 ,sizeof(curr_test));
memset((char *) chparam,0 ,sizeof(chparam));
memset((char *) stats,0 ,sizeof(stats));
memset((char *) bufs,0 ,sizeof(bufs));
memset((char *) comand,0 ,sizeof(comand));
ntest = 0;
new_dbuff = 0;
start_err = 0;
3.call init_vars()中的main.c
我第一次在試圖CLUDE「variables.c」直接在init_vars.c,但它給了我下面的錯誤:
#10056 symbol "ad_lok" redefined: first defined in "./variables.obj"; redefined in "./init_vars.obj" sCharger_Test_v1 C/C++ Problem
不僅ad_lok變量,但也variables.c定義的每個變量的命中誤差。
將variables.c改爲variables.h仍然給我相同的錯誤。
如何處理變量定義的c文件而不是頭文件?
感謝
您必須確保您只包含一次 - 通常使用'#ifdef'類型的構造來完成此操作,並在其中定義一個變量。這樣當文件第二次被包含時,它將被跳過。你可以在所有的頭文件中看到這個 - 例如,打開'stdio.h'。看起來像可怕的編碼雖然。 – Floris
您應該*總是*在.c文件中定義變量。你應該只在* .h文件中聲明它們。 'init_vars.c' +必須*(你的任何修改之前)看到這些變量的聲明,否則它不會編譯。因此你需要找出並理解它爲什麼看到這些變量。沒有這種理解,你的改變必然會破壞事物。 –