在另一个文件中使用不带结构名称的struct作为extern

时间:2014-09-16 02:33:53

标签: c struct extern

我正在使用xv6,并且有一个包含此文件的c文件:

struct {
    struct spinlock lock;
    char buf[INPUT_BUF];
    uint r;  // Read index
    uint w;  // Write index
    uint e;  // Edit index
} input;

我不想编辑此文件,但我确实想在我制作的另一个文件中使用input。我不确定如何执行此操作,extern inputextern struct input等外部声明无法正常工作

1 个答案:

答案 0 :(得分:4)

没有编辑文件就无法正确执行此操作;两种不同的未标记结构被认为是不同类型。

在其他文件中重复结构定义可能“有效”,但这不符合C标准。

将此文件更改为struct input_t {等,并将其他文件设为extern struct input_t { ... } input;

当然最好将结构定义(以及它所依赖的任何定义,例如spinlockINPUT_BUF)放在一个公共头文件中,这是为了防止ODR违规。如果你不这样做,那么要非常小心,两个文件都使用完全相同的结构定义。例如,如果INPUT_BUF彼此不同,则会导致未定义的行为。