文件间调用变量(extern,include)[转]

     首先要搞清楚的是.h头文件中都是一些声明性的语句,干的是不分配内存的事,所以头文件中有对函数的声明,有defeinse语句,有没有实例化的结构体定义,但是没有对变量的定义(比如 int a),有的只是对外变量的声明(extern int a)。

  对于一个文件中调用另一个文件的全局变量,因为全局变量一般定义在原文件.c中,我们不能用#include包含源文件而只能包含头文件,所以常用的方法是用extern  int a来声明外部变量。   还有一种方法是可以是在a.c文件中定义了全局变量int global_num ,可以在a.h头文件中写extern int global_num 这样其他源文件可以通过include a.h来声明她是外部变量就可以了

  对于一个文件中调用另一个文件中的函数,最常用的是在.h头文件中声明函数,其他源文件可以通过#include该文件来声明函数并且在调用该函数时自动调到函数地址处执行。  也可以是在a.c中定义了该函数int fun   在b.c中用extern int  fun来声明该函数是外部的 然后调用。

  搞清楚概念的关键是理解声明,定义的区别,头文件的作用,还有变量和函数的不同是 int fun();和 extern int fun()都是声明 而变量是int a;是定义 extern int a 是声明。 用extern int  fun()只是更明确点。

 此外,extern修饰符可用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同。

posted @ 2013-05-10 16:36  skykang  阅读(368)  评论(0编辑  收藏  举报