C extern变量访问

ede*_*iss 2 c extern

我有一个头文件,其中声明了一个extern变量.

所以在这个啊文件中看起来会像这样

  extern uint16_t externVariable;
Run Code Online (Sandbox Code Playgroud)

所以我有2个.c文件b和c,其中我想访问ah文件中的extern变量.在b和c .c文件中我已经包含了ah文件

当我没有在b中声明变量但在c中声明(没有单词extern)时就是这样的

 uint16_t externVariable;
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是当它在b和ci中都有一些编译错误.有什么方法可以解决这个问题吗?

这样做的原因是因为我在.c文件中有代码,我想将代码分成2个不同的.c文件,以获得整洁和清晰.

abe*_*nky 5

该变量应仅在一个源代码文件中声明.(b.c示例中的文件).

通过extern在头文件中,甚至在多个.c文件的顶部声明它,你基本上说"变量不在这里,它的外部.但它确实存在,并且它将对你可见."

变量应该只在一个文件中"存活".

如果你试图在多个源文件,它"活"(例如,通过在这两个宣布它b.cc.c),你会得到你看到的错误.

  • 值得一提的是*链接器*将发出错误,因为它在两个不同的文件中看到相同的名称.这就像在两个不同的源文件中定义相同的函数并链接结果一样. (3认同)