我读了几篇文章,得出的结论是,extern告诉编译器“此函数存在,但是它的代码在其他地方。不要 panic 。”但是链接器如何知道函数的定义位置。

我的情况:-
我正在研究Keil uvision4。有一个头文件grlib.h,主要功能在grlib_demo.c(包括grlib.h)中。现在,在Circle.c中定义了一个函数GrCircleDraw(),并在grlib_demo.c中调用了该函数,还有一条语句



在grlib.h中。我的查询是链接器如何知道GrCircleDraw()的定义在哪里,因为Circle.c未包含在grlib.h和grlib_demo.c中

注意:-文件grlib.h和Circle.c在同一文件夹中。代码成功运行。

最佳答案

简单的答案是“编译器不需要知道,但是链接程序必须能够找到它”。通过多个.o文件或通过库,链接器必须能够找到GrCircleDraw函数的单个定义。

10-05 18:25