코드를 남긴 알 수없는 전임자. 나는 그 중 일부를 사용하려고 시도하지만 그의 코드는 특이한 것처럼 보입니다. variables.cc 파일에 정의 된 변수 처리시 헤더 파일이 아님
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; ....
다른 C 파일에
2 init_vars() 초기화 변수 위 :
init_vars.c 그가 한 1.What하지 헤더하지만 C 파일에 변수를 정의하다 main.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()
I 안으로 시도한 처음
#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에 정의 된 모든 변수는 오류 충돌 : clude "variables.c"직접 init_vars.c에, 그러나 그것은 오류 아래 내게 준.
variables.c를 variables.h로 변경하면 여전히 동일한 오류가 발생합니다.
헤더 파일이 아닌 변수를 어떻게 처리 할 수 있습니까?
덕분에 변수 나 전 처리기 매크로를 선언하지만, 실제로 당신이 그들에게 "포함"단계에서 extern
을해야하고, 하나의 파일에 정의됩니다,이 변수를 정의하지 않습니다 variables.c
때문에
정확히 한 번 포함시켜야합니다. 일반적으로'# ifdef' 유형의 구문을 사용하고 그 안에 변수를 정의하십시오. 이렇게하면 파일이 두 번째 포함될 때 건너 뜁니다. 모든 헤더 파일에서 이것을 볼 수 있습니다 - 예를 들어'stdio.h '를 열면됩니다. 그래도 끔찍한 코딩처럼 보입니다. – Floris
.c 파일에 변수를 정의해야합니다. .h 파일로 만 * 선언해야합니다. 'init_vars.c' +는 (변경 전에) 반드시이 변수의 선언을 봐야합니다. 그렇지 않으면 컴파일되지 않습니다. 따라서 왜 이러한 변수가 정확한지 알아 내야 만합니다. 이러한 이해가 없으면 변경 사항은 일을 깨뜨릴 수밖에 없습니다. –