c语言高手进深究一下extern的用法

c语言高手进深究一下extern的用法

整个编译过程分编译和链接两部分。

编译是以 .c文件为一个单元的, 也就是说, 编译的时候编译器每次就只关注这一个.c文件, 编译的过程跟其它.c里写了什么毫无关系。

所以define语句不存在什么作用域的问题, 写在哪就在哪运行, 写几次就运行几次。

另外就是理解#include的意义。

每本书都会讲, #include就是把那个文件的内容替换到当前位置, 奇怪的是总有人觉得这里面有什么更神奇的东西存在。

#include就是替换,没有别的 。

所以每个.h里面所有东西被编译器看到都是在某个 .c里面, 这时候这些语句就相当于是写在.c里的语句。

然后就可以解释你的问题。

ucos.h里面有一个extern声明, 所以凡是include了它的.c里面就都有这么个声明, 有这个声明就是告诉编译器,某个地方有这东西, 你就用就行了。

所以就可以随便用它 但是只有extern的声明还不行, 因为毕竟这个东西需要在某个地方切实地实现它,否则编译没问题而链接是不可能过的。

所以就需要在某个.c里写上它的实现。

为了简单点完成这个而写了#ifdef之类的东西, 就是想在定义了 _main的情况下写它的实现, 而没定义这个的情况下变成它的声明。

首页