• 文件间调用变量(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程序编译完成后在目标代码中命名规则不同。

  • 相关阅读:
    POJ 3630
    Codeforces Round #219 (Div. 2) D题
    Codeforces Round #232 (Div. 2) On Sum of Fractions
    Codeforces Round #232 (Div. 2) C
    撸呀撸的左手(KMP+DP)
    hdu poj KMP简单题目总结
    LCT总结
    bzoj1019 [SHOI2008]汉诺塔
    NOIP2016总结
    p1199八数码问题
  • 原文地址:https://www.cnblogs.com/skykang/p/3071446.html
Copyright © 2020-2023  润新知