Chinaunix首页 | 论坛 | 博客
  • 博客访问: 505858
  • 博文数量: 77
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 689
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-12 08:40
文章分类

全部博文(77)

文章存档

2018年(1)

2016年(3)

2015年(24)

2014年(49)

我的朋友

分类: 嵌入式

2014-07-25 14:56:28

extern

    在源文件A里定义的函数,在其它源文件里是看不见的(即不能访问)。为了在源文件B里能调用这个函数,应该在对应的头文件中声明定义了的函数,B只需要包含这个头文件即可:

   #"head.h"
    extern   
函数原型;   


    这样,在源文件
B里也可以调用那个函数了。   
    
注意这里的用词区别:在A里是定义,在头文件里是声明。一个函数只能(也必须)在一个源文件里被定义,但是可以在其它多个源文件里被声明。定义引起存储分配,是真正产生那个实体。而声明并不引起存储分配。


    1.extern
用在变量声明中常常有这样一个作用,你在*.c文件中定义了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

点击(此处)折叠或打开

  1. // 某个头文件,比如叫 ExternTest.h 中
  2. extern int iExtern; // 这样就是一个变量声明——而不是定义,因为没有分配存储空间
  3.                     //这以后就可以引用这个变量,而这个变量的存储于下面的 int iExtern; 的那个位置分配
  4.                     

  5. // 某个源文件,比如叫 ExternTest.c 中
  6. int iExtern;
  7.     //不能写成 static int iExtern; 因为这样就不再是全局的变量——不具有External Linkage性质
  8.     //也不能写成 extern int iExtern; 因为这样就不再是一个定义,

  9. // 另一个源文件,比如叫 main.c 中
  10. #include "ExternTest.h"
  11. //......其他代码
  12. int iTwiceExt = iExtern * 2; // 这里就可以直接用iExtern这个变量,因为在 ExternTest.h 声明过了
  13. //......其他代码
    2.如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有区别:
  extern int f(); int f()

    
如果定义函数的c/cpp文件在对应的头文件中声明了定义的函数,那么在其他c/cpp文件中要使用这些函数,只需要包含这个头文件即可。
  如果你不想包含头文件,那么在c/cpp中声明该函数。一般来说,声明定义在本文件的函数不用“extern”,声明定义在其他文件中的函数用“extern”,这样在本文件中调用别的文件定义的函数就不用包含头文件。
    

调用定义在其他c中的函数:

点击(此处)折叠或打开

  1. extern print(char *p);
  2.   int main(int argc, char* argv[])
  3.   {
  4.    char *p="hello world!";
  5.    print(p);
  6.    return 0;
  7.   }

点击(此处)折叠或打开

  1. print(char *s)
  2.   {
  3.    printf("The string is %s/n",s);
  4.   }




阅读(1022) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~