在其他源文件中定义的extern变量和结构

时间:2011-12-09 08:13:14

标签: c struct typedef extern

有两个带结构定义的文件。部首:

typedef struct _InputData InputData;
extern InputData input_data;

和源文件:

struct _InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData input_data = {...};

当我尝试使用其他源文件中的input_data时,它给了我“无效使用不完整的typedef'InputData'”。我想我明白为什么会这样,但我怎么能以最优雅的方式处理它。

3 个答案:

答案 0 :(得分:2)

您已经在头文件中定义了完整的结构。否则就无法知道它有哪些字段,即它不完整。

答案 1 :(得分:1)

您可以(或多或少)执行此方法,但您需要将结构定义为指针:

extern struct InputData* input_data;

源文件:

struct InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};

InputData* input_data; 
...
input_data = malloc(sizeof(InputData)); 

答案 2 :(得分:0)

您可以使用指向其他地方定义的struct的指针,但不能指定实例。编译器不知道结构是什么以及如何计算这样一个变量的内存偏移量。

为什么要将struct定义放在C文件中?把它放在标题中。