gpt4 book ai didi

c - 将结构定义为 extern

转载 作者:行者123 更新时间:2023-11-30 17:08:04 30 4
gpt4 key购买 nike

我正在处理多个文件,其中所有文件都是链接的。我有一个将在大多数文件中使用的结构。

这就是我正在做的事情:我正在一个文件 data.c 中初始化结构,并在另一个文件 user.c 中定义它。我这样做是因为代码序列的方式是通过调用 data.c 中的函数 data_init() 在 main() 函数中初始化数据,并且从 user 中的套接字读取结构的值.c

因为这个结构体在很多其他文件中被引用,所以我在data.h中将其声明为extern(因为我已经在data.c中初始化了该结构体)

现在的问题是我在 file3.c 中使用此结构,我应该在其中获取 user.c 中定义的值,但我收到的值以前在该结构上。不是读入 user.c 结构中的当前值。

我不明白为什么会发生这个错误。我无法附加代码,因为太多文件引用了该结构。

任何建议都会非常有帮助。谢谢!

编辑:我正在使用以下文件。对于严重的延误,我深表歉意。PS:除了结构体之外,我还定义了一个标志为extern,我在file3.c中访问的其值与预期不符。

类型.h:

#include<stdio.h>
#include<stdlib.h>


typedef struct
{
int num;
char name[10];
}struct1;

typedef struct
{
int num;
char status[10];
}struct2;

数据.c

#include"data.h"

//Globals:
struct1 packet;
struct2 packet2;

void data_init(void)
{
memset(packet, 0 ,sizeof(packet));
memset(packet2, 0, sizeof(packet2));
}

数据.h:

#include"types.h"

extern struct1 packet;
extern struct2 packet2;

void data_int(void);

用户.c

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>

#include"data.h"
#include "user.h"
#include "file3.h"

//Globals:
int flag = 0;

void read_socket(void)
{
int bytes, number;

bytes = recv(cli_sock, &packet, sizeof(packet), MSG_DONTWAIT);
if (bytes > 0)
{
flag = 1;
number = packet.num
switch(number)
{
//cases depending on value of number
case 3:
case 4:
check_param(); //function in file3.c
break;
}
}
}

用户.h:

extern int flag;

文件2.c

#include"data.h"

void write_socket(void)
{
serialise_send(&packet2); //send data after serialisation
flag = 0;
}

文件3.c

#include"data.h"
#include"file2.h"


void check_param(void)
{
if(flag) // sometimes the value of the flag is also not set
{
int number;

number = packet1.num;
if (number > 2) // this is where I dont get the cuurent value of the structure which is read in user.c
{
printf("\n%d\n",number);
packet2.age = number;
packet2.name = "success";
write_to_socket(); // function in file2.c
}

}
}

main.c

#include"data.h"

void main()
{
data_init();
poll_add(); //add poll functions for sockets to poll infinitely
while((polling)); //if poll returns success for infinite time, program stays here
}

最佳答案

.h文件中声明结构体变量

例如;

struct abc
{
//members
};

extern struct abc val;

现在将 .h 文件包含在所有文件中。然后所有文件将具有相同的结构 View 。确保在其中一个文件中定义结构变量。

关于c - 将结构定义为 extern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840855/

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