gpt4 book ai didi

c - 如何在我的程序的多个文件中共享结构?

转载 作者:行者123 更新时间:2023-12-02 06:22:19 24 4
gpt4 key购买 nike

这是我的问题:
我的程序中有一个很大的 main.c 文件,其中包含 40 个左右的“全局”结构(它们在文件开头声明),我的 main.c 文件中也有几个函数,我可以直接读取和写入这些结构,因为它们是全局的。
现在我试图将我原来的 main.c 文件的几个函数移动到另一个 .c 文件中,该文件将只包含与我的程序的特定部分相关的函数。但是我当然不能从我的新 .c 文件中直接访问 main.c 全局变量。
有没有解决的办法?
我想避免通过指针传递每个结构,因为这会得到可怕的函数原型(prototype)。
谢谢

最佳答案

将全局结构定义移动到 header (.h) file只是#include您需要访问这些结构的每个 c 文件中的 header 。可以声明任何全局变量extern然后在你的 main.c 中定义。

全局.h

// WARNING: SHARING DATA GLOBALLY IS BAD PRACTICE

#ifndef GLOBAL_H
#define GLOBAL_H

//Any type definitions needed
typedef struct a_struct
{
int var1;
long var2;
} a_struct;

//Global data that will be defined in main.c
extern a_struct GlobalStruct;
extern int GlobalCounter;

#endif

main.c
#include "Global.h"
#include "other.h"

#include <stdio.h>

int GlobalCounter;
a_struct GlobalStruct;

int main(int argc, char *argv[])
{
GlobalCounter = 5;

GlobalStruct.var1 = 10;
GlobalStruct.var2 = 6;

printf("Counter: %d\nStruct [ var1: %d var2: %ld ]\n",
GlobalCounter, GlobalStruct.var1, GlobalStruct.var2);

do_other_stuff();

printf("Counter: %d\nStruct [ var1: %d var2: %ld ]\n",
GlobalCounter, GlobalStruct.var1, GlobalStruct.var2);

return 0;
}

其他.h
#ifndef OTHER_H
#define OTHER_H

void do_other_stuff(void);

#endif

其他.c
#include "other.h"
#include "Global.h"

void do_other_stuff(void)
{
GlobalCounter++;
GlobalStruct.var1 = 100;
GlobalStruct.var2 = 0xFFFFFF;
}

关于c - 如何在我的程序的多个文件中共享结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097346/

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