2012-06-21 3 views
1

그래서 네 가지 다른 프로세스를 사용하여 몇 가지 작업을 수행하는 프로그램을 만들었습니다. 나는 완벽하게 작동하지만 지금은 각 프로세스가 자체 .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 파일이 필요합니까?

답변

0

넣고이 당신의 .H에 :

extern void *functionTable; 

그럼 정확히 하나 개의 파일, 예를 들어,이를 넣어 와 소스 파일 "주()":이 작업을 수행하는

#include "processes.h" 
... 
void (*functionTable[NR_OF_PROCESSES]) (int pfds[5][2]) = { 
    readProcess, 
    tokenProcess, 
    calculatorProcess, 
    errorProcess 
}; 
+0

.h –

+2

에서 functionTable에 대한 유형이 잘못되었습니다.하지만 헤더 파일 선언은 'extern void (* functionTable []) (int pfds [5] [2]);'여야합니다. 또는 더 나은 방법은 함수 포인터 타입에'typedef'를 사용하는 것입니다. –

+1

이것은 아담스 제안과 함께 저에게 해주었습니다. – Tono

0

한 가지 방법은 processes.h에서

#ifdef GENERATE_DEFINITIONS 
#define EXTERN 
#define INITIALIZE(x) = x 
#else 
#define EXTERN extern 
#define INITIALIZE(x) 
#endif 

EXTERN void (*functionTable[NR_OF_PROCESSES]) (int pfds[5][2]) 
    INITIALIZE({ 
    readProcess, 
    tokenProcess, 
    calculatorProcess, 
    errorProcess 
    }); 

을 넣어하는 것입니다 후

전에

#define GENERATE_DEFINITIONS 

를 넣어

#include "processes.h" 

소스 파일 중 하나만 (예 : 하나는 main()을 포함합니다.

관련 문제