我正在处理多个文件,其中所有文件都已链接。我有一个在大多数文件中使用的结构。
这就是我正在做的事情:我在一个文件data.c中初始化结构,我在另一个文件user.c中定义它。我这样做是因为代码序列的方式是通过调用data.c中的函数data_init()在main()函数中初始化数据,并从用户的套接字读取结构的值.C
因为在许多其他文件中引用了这个结构,所以我在data.h中将它声明为extern(因为我在data.c中初始化了结构)
现在问题是我在file3.c中使用这个结构,我应该得到user.c中定义的值,但是我收到的是之前在结构上的值。不是读入user.c中结构的当前值。
我不明白为什么会发生这个错误。我无法附加代码,因为在太多文件中引用了结构。
任何建议都会有很大帮助。 谢谢!
编辑:我正在使用以下文件。我很抱歉极度拖延。 PS:除了结构我还将一个标志定义为extern,我在file3.c中访问的值不是预期的。
types.h中:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int num;
char name[10];
}struct1;
typedef struct
{
int num;
char status[10];
}struct2;
data.c
#include"data.h"
//Globals:
struct1 packet;
struct2 packet2;
void data_init(void)
{
memset(packet, 0 ,sizeof(packet));
memset(packet2, 0, sizeof(packet2));
}
data.h:
#include"types.h"
extern struct1 packet;
extern struct2 packet2;
void data_int(void);
user.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;
}
}
}
user.h:
extern int flag;
file2.c中
#include"data.h"
void write_socket(void)
{
serialise_send(&packet2); //send data after serialisation
flag = 0;
}
file3.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
}
答案 0 :(得分:0)
在.h
file
对于Eg;
struct abc
{
//members
};
extern struct abc val;
现在在所有文件中包含.h
文件。
然后所有文件将具有相同的结构视图。
确保在其中一个文件中定义结构变量。
答案 1 :(得分:0)
现在问题是我在file3.c中使用这个结构,我在哪里 应该得到user.c中定义的值,但我收到一个值 以前是在结构上。不是当前值 读入user.c中的结构。
您读入了user.c中的结构对象packet
,但是在file3.c中,您检查了不同的结构对象packet1
。