无法声明和初始化全局结构

时间:2015-11-10 21:17:57

标签: c struct global-variables global

在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;
}

这不会编译,我无法弄清楚原因。有人可以对此有所了解吗?

2 个答案:

答案 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

中的本地对象
  1. 您正在尝试malloc获取静态对象。
  2. 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;
    }