在h.c文件中:
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
extern YS y;
在m.c文件中:
#include "h.c"
int void main()
{
YS y = malloc(sizeof(YS));
y.x_array[0].x = 1;
free(y);
return 0;
}
这不会编译,我无法弄清楚原因。有人可以对此有所了解吗?
答案 0 :(得分:0)
你的主要必须是这样的:
#include "h.h"
int main()
{
YS *y = malloc(sizeof(YS));
y->x_array[0].x = 1;
free(y);
return 0;
}
在h.h文件中:
#ifndef H_H
#define H_H
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
#endif
答案 1 :(得分:0)
您的代码存在多个问题:
1.在h.c中,将YS y
声明为extern
,这意味着编译器需要y的外部全局声明。但是你已经将它声明为m.c
malloc
获取静态对象。 h.h
#include <stdlib.h>
typedef struct
{
int x;
}XS;
typedef struct
{
XS x_array[10];
}YS;
YS *y;
M.C:
#include <stdlib.h>
#include "h.h"
extern YS *y;
int void main()
{
y = malloc(sizeof(struct YS));
y->x_array[0].x = 1;
free(y);
return 0;
}