惧留孙网

juliusun.com

在线教程 > C语言教程 > extern跨源文件代码调用

extern跨源文件代码调用

第 46/50 节 冥河C语言教程


除了头文件信息可以共用,源文件信息也可以共享。

通过extern关键字,可以使用其它源文件里面的函数或变量。

大型项目,源代码要多人合作编写。不同的源文件之间共享变量和函数是十分必要的。

extern关键字,就是出于这种考虑而引入的。通过extern可以引用其它源文件里的全局变量和函数。

局部变量仅在函数内有效,extern关键字当然也不能引用。函数不允许嵌套定义,是没有全局或是局部之分的。

extern就是外部的意思。外部变量指其它源文件中的全局变量,外部函数指其它源文件中的函数。

多个源文件共用一个函数或全局变量,需要在一个源文件中正常声明定义全局变量或函数,然后在需要引用此变量或函数的其它源文件中,使用extern关键字声明下相应的外部变量或函数。

extern 类型 外部变量或函数名;

由于extern声明的变量或函数在外部文件中,因此用extern关键字声明的变量是不需要赋值的。

变更如果是数组,需要数组长度时需要指明长度,但是不需要指明各元素的值。不需要长度时,元素个数都可以省略,这些信息在外部文件中已经定义好了,编译器通过变量或函数名即可从外部文件中获取相关信息。

引用外部函数时,就相当于在函数声明前加个extern关键字指示来自外部文件。

需要注意,多个源文件引用头文件共享代码时,头文件的代码类似于复制进源文件,本质是分开的,比如头文件中有全局变量i,两个源文件引用,则这两个源文件中的i互不影响而源文件中通过extern引用的代码,是共同的,改变其中一个,另一个也随之变。

通过extern关键字声明后,以后的代码就可以像自己定义过变量或函数一样使用它了。

实际定义全局变量或函数的源文件中,代码正常书写即可。

假设源文件a.c中定义了int类型变量i,在b.c中需要引用,那么各个源文件中写法如下:

a.c文件定义代码:


  1. int i = 99 ; //正常定义即可,也可以不初始化如int i;与正常定义一样

b.c文件引用a.c源文件中的变更i代码:


  1. extern int i ; //不需要给出值,初值a.c中已经定义了

如果有多个文件都需要引用a.c中的变量i,写法与b.c中引用代码相同,均为extern int i;。

需要注意的是,多个源文件要同时参与编译,引用代码才会有效。同时编译,不同的开发环境操作不所不同。VC6编译器将需要编译的多个源文件放在同一个工程里即可;VS系列编译把多个源文件添加到同一个项目中即可,其它开发环境或编译器视具体情况而定。还需要注意一个工程或项目中无论多少源文件,只能有一个main函数。

以一个稍微复杂的例子说明一下,在源文件out.c中定义一个数组和一个函数。在in.c中引用out.c中的数组和函数。in.c和out.c一同编译。

out.c中的代码如下:


  1. // out.c 本文件的定义就是正常的定义
  2. #include<stdio.h>
  3. int arr[5] = {31,32,33,34,35}; //定义数组并初始化
  4. int len = 5; //用这个变量来记录数组的元素个数
  5. void show_arr(int a[ ], unsigned int len) //定义一个函数,输出数组元素
  6. {
  7. for (unsigned int i = 0; i < len; ++i)
  8. {
  9. printf("%d ", a[ i ] ) ;
  10. }
  11. }

in.c中的代码如下:


  1. // in.c
  2. #include<stdio.h>
  3. int main()
  4. {
  5. extern int arr[ ]; //声明外部数组,不需要数组长度,因为用len变量来获取了
  6. extern int len; //外部变量记录外部数组长度
  7. extern void show_arr(int a[], unsigned int len); //外部函数
  8. show_arr(arr, len); //声明好外部函数,就可以像本源文件定义的函数一样调用了
  9. getchar( ) ; //使程序暂停一下
  10. return 0;
  11. }

效果类似如下图:

Pic

运行平台不同效果图有所差异。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的