gpt4 book ai didi

C - 在文件之间正确重用代码/方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:10 25 4
gpt4 key购买 nike

我是一个 C 初学者,Java 技能一般,我不确定如何正确地在文件之间重用 C 代码。

假设我有两个文件/模块:server.cclient.c

它们没有链接(与 GCC)并且应该在单独的进程中运行。

我想在client.c 中使用server.c 中的两个方法。这些方法在同一模块中使用全局、静态(常量)变量。基本上我想要的功能与将它们复制到其他文件时的功能相同。

小例子:

server.c

static const char *progname = "server";

static int sockfd = -1;
static int connfd = -1;

static void free_resources(void)
{
if (sockfd >= 0) {
(void) close(sockfd);
}

if (connfd >= 0) {
(void) close(connfd);
}
}

client.c

static const char *progname = "client";

static int sockfd = -1;
static int connfd = -1;

// I want to use free_resources here

如果我想在 client.c 中使用相同的方法,正确的方法是什么?

如果我使用该方法创建一个单独的 util.c/util.h 模块,我该如何访问全局变量?我应该每次都将它们作为参数传递吗?去除静电?

在 Java 中,我可能会创建一个类并传递(对)全局变量一次。 C中有类似的方法吗?

最佳答案

In Java I would probably create a class...

C 中的等效项是创建一个结构,并将指向该结构的指针传递给需要访问变量的任何函数。结构声明应该在 utils.h 中,例如

typedef struct
{
char *progname;
int sockfd;
int connfd;
}
Info;

void free_resources( Info *info );

在server.c和client.c中创建并初始化结构,然后将地址传递给常用函数,例如

Info server_info = { "server", -1, -1 };

int main( void )
{
// ...

free_resources( &server_info );
}

然后 utils.c 中的代码如下所示。 (请注意,您不能使用 static 关键字,因为该函数必须可从 utils.c 外部调用)

void free_resources( Info *info )
{
if (info->sockfd >= 0) {
(void) close(info->sockfd);
}

if (info->connfd >= 0) {
(void) close(info->connfd);
}
}

关于C - 在文件之间正确重用代码/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40412265/

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