c语言高手进深究一下extern的用法
整个编译过程分编译和链接两部分。
编译是以 .c文件为一个单元的, 也就是说, 编译的时候编译器每次就只关注这一个.c文件, 编译的过程跟其它.c里写了什么毫无关系。
所以define语句不存在什么作用域的问题, 写在哪就在哪运行, 写几次就运行几次。
另外就是理解#include的意义。
每本书都会讲, #include就是把那个文件的内容替换到当前位置, 奇怪的是总有人觉得这里面有什么更神奇的东西存在。
。
。
#include就是替换,没有别的 。
所以每个.h里面所有东西被编译器看到都是在某个 .c里面, 这时候这些语句就相当于是写在.c里的语句。
然后就可以解释你的问题。
ucos.h里面有一个extern声明, 所以凡是include了它的.c里面就都有这么个声明, 有这个声明就是告诉编译器,某个地方有这东西, 你就用就行了。
所以就可以随便用它 但是只有extern的声明还不行, 因为毕竟这个东西需要在某个地方切实地实现它,否则编译没问题而链接是不可能过的。
所以就需要在某个.c里写上它的实现。
为了简单点完成这个而写了#ifdef之类的东西, 就是想在定义了 _main的情况下写它的实现, 而没定义这个的情况下变成它的声明。