我正在使用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 input
和extern struct input
等外部声明无法正常工作
答案 0 :(得分:4)
没有编辑文件就无法正确执行此操作;两种不同的未标记结构被认为是不同类型。
在其他文件中重复结构定义可能“有效”,但这不符合C标准。
将此文件更改为struct input_t {
等,并将其他文件设为extern struct input_t {
... } input;
。
当然最好将结构定义(以及它所依赖的任何定义,例如spinlock
或INPUT_BUF
)放在一个公共头文件中,这是为了防止ODR违规。如果你不这样做,那么要非常小心,两个文件都使用完全相同的结构定义。例如,如果INPUT_BUF
彼此不同,则会导致未定义的行为。