그래서 네 가지 다른 프로세스를 사용하여 몇 가지 작업을 수행하는 프로그램을 만들었습니다. 나는 완벽하게 작동하지만 지금은 각 프로세스가 자체 .c 파일을 갖도록 분할하려고합니다. 나는 모든 프로세스를위한 함수 프로토 타입을 가지고있는 "processes.h"헤더 파일을 사용하여 이것을 시도했다. 그것은 다음과 같습니다다른 파일에서 프로세스 나누기
#ifndef PROCESSES_H_
#define PROCESSES_H_
/*------------------------------------------------------------------------------
definitions (defines, typedefs, ...)
------------------------------------------------------------------------------*/
#define NR_OF_PROCESSES 4
enum errCode {
ERR_NONE = 0, ERR_SYNTAX, ERR_OPEN, ERR_TOKEN, ERR_ARG, ERR_END
};
typedef enum errCode ErrCode;
enum toktype {
NUMBER = 0, OPERATOR, ENDOFLINE, ENDOFFILE
};
typedef enum toktype Token;
/*------------------------------------------------------------------------------
function prototypes
------------------------------------------------------------------------------*/
void readProcess(int pfds[5][2]);
void tokenProcess(int pfds[5][2]);
void calculatorProcess(int pfds[5][2]);
void errorProcess(int pfds[5][2]);
/*------------------------------------------------------------------------------
global variable declarations
------------------------------------------------------------------------------*/
void (*functionTable[NR_OF_PROCESSES]) (int pfds[5][2]) = {
readProcess,
tokenProcess,
calculatorProcess,
errorProcess
};
#endif /*PROCESSES_H_*/
모든 "processes.h"함수 사용법 #include의 구현을 포함하는 .c 인 파일 및 (프로세스를 설정하는 functionTable 사용) 주요 기능 또한 프로세스를 포함을 .h.
ld: duplicate symbol _functionTable in /var/folders/eH/eHF8LmdvHzSsNgT01V3jyk+++TI/-Tmp-//ccDgTW2X.o and /var/folders/eH/eHF8LmdvHzSsNgT01V3jyk+++TI/-Tmp-//ccp7zO9L.o
collect2: ld returned 1 exit status
이 다른 파일에 분할을 수행하는 올바른 방법인가 :
내가 컴파일하려고
나는 오류를 얻을? 또는 .c 파일마다 별도의 .h 파일이 필요합니까?
.h –
에서 functionTable에 대한 유형이 잘못되었습니다.하지만 헤더 파일 선언은 'extern void (* functionTable []) (int pfds [5] [2]);'여야합니다. 또는 더 나은 방법은 함수 포인터 타입에'typedef'를 사용하는 것입니다. –
이것은 아담스 제안과 함께 저에게 해주었습니다. – Tono