C 使用extern从源文件访问结构时出错
我是C语言的新手,我在读关于C 使用extern从源文件访问结构时出错,c,struct,C,Struct,我是C语言的新手,我在读关于extern。我将它与内置数据类型一起使用,效果很好,但是当我尝试将它与结构一起使用时,它给出了以下错误。我做错了什么 bar.c struct MyX { int x; } X; extern struct MyX X; int main() { X.x=80; return 0; } foo.c struct MyX { int x; } X; extern struct MyX X; int main() { X.x
extern
。我将它与内置数据类型一起使用,效果很好,但是当我尝试将它与结构一起使用时,它给出了以下错误。我做错了什么
bar.c
struct MyX
{
int x;
} X;
extern struct MyX X;
int main()
{
X.x=80;
return 0;
}
foo.c
struct MyX
{
int x;
} X;
extern struct MyX X;
int main()
{
X.x=80;
return 0;
}
gcc-o barfoo.c bar.c
错误:
未定义类型“struct MyX”的使用无效
因为
gcc-o barfoo.c bar.c
(实际上应该是gcc-Wall-Wextra-g foo.c bar.c-o barfoo
;在编译代码时应该始终启用所有警告和调试信息)正在编译两个编译单元(foo.c
和bar.c
),然后将它们合并在一起
关于C声明,每个编译单元(or)都是“自给自足”的;您应该声明在翻译单元中使用的每个非预定义类型(例如,struct
),通常是在一些公共头文件中
所以你应该
struct MyX {
int x;
};
及
在foo.c
和bar.c
中。为了避免复制粘贴,您可能希望将其放在一些myheader.h
中,并在foo.c
和bar.c
的开头使用#包括“myheader.h”
,即使用
// file myheader.h
#ifndef MYHEADER_INCLUDED
#define MYHEADER_INCLUDED
struct MyX {
int x;
};
extern struct MyX X;
#endif /* MYHEADER_INCLUDED */
请注意传统用法。阅读更多有关的信息,例如
一些编程语言(例如Ocaml、Rust、Go等,但不是C,也不是C++)具有处理该问题的模块或包
另外,你应该学习一些用C编写的代码的源代码。你会学到很多。请在你的问题标题上多加努力。没有人会找到这个标题的问题。仍然显示相同的错误。如何在头文件中声明此非预定义类型结构?