gpt4 book ai didi

c - 拆分不同文件中的进程

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:11 25 4
gpt4 key购买 nike

所以我制作了一个程序,它使用四个不同的进程来做一些事情。我工作得很好,但现在我想把它分开,这样每个进程都有自己的 .c 文件。我尝试使用头文件“processes.h”来完成此操作,该文件具有所有进程的函数原型(prototype)。它看起来像这样:

#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_*/

所有包含函数 #include "processes.h"实现的 .c 文件和主要函数(使用 functionTable 设置进程)也包含 processes.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中:

extern void *functionTable;

然后把它放在一个文件中,例如带有“main()”的源文件:

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

关于c - 拆分不同文件中的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com