extern用法解析

原创 2013年12月03日 16:40:25

要想搞清楚extern用法前,需对由多个文件组成的工程结构有一定的了解。把一个工程分为多个文件处理方式的好处有,功能模块化、并行开发和系统调试分开进行。每个功能模块主要分为两个文件,源文件(.c或者.cpp等)和头文件(.h)。头文件可以看做源文件的说明书,使用者不必知道实现的细节,但通过头文件即可使用。源文件就是集体的实现细节[1]。为此源文件和头文件有其标准的结构,源文件和头文件具体的文件结构如下[2]。

源文件各部分书写顺序(使用说明)

1. Header File Header Section---头文件描述(作者,修改日期,简要描述等)

2. Mult - Include-Prevent Section---防止头文件重复包含

3. Debug Switch Section

4. Include File Section

5. Macro Define Section

6. Struct Define Section

7. Prototype Declare Section

源文件各部分书写顺序(实现细节)

1.       Source File Header Section

2.       Debug Switch Section

3.       Include File Section

4.       Macro Define Section

5.       Structure Define Section

6.       Prototype Declare Section

7.       Global variable Declare Section

8.        File Static VariableDefine Section + Global variable DefineSection(原文可能有误,后者是我自己添加的)

9.       Function Define Section

由上面可知全局变量的定义一般只在源文件中。已源文件1和头文件1,源文件2和头文件2为例说明情况。如果在源文件1中有定义有全局变量i,要想在源文件2中使用源文件1中的全局变量i前,必须予以声明,声明就需用到extern。搞清楚下面问题前,弄清楚全局变量的声明和定义。

全局变量i定义有  extern int i = 0;

int i = 0;

int i;

全局变量变量i申明有

extern int i;

那为什么需要声明,可不可以不用声明?一定有要声明。我们知道各个文件首先经过相互独立编译,然后各个编译后文件模块链接形成可运行文件。如果源文件2对全局变量i的声明,则在编译源文件2过程中碰到变量i时会报错提示变量i没有定义。还有人说我现已知道了声明的原因,那么声明前可以不用加extern吗?如果不用声明前extern,则声明变为定义(extern int i 变为 int i),而同名称全局变量在整个工程中只能定义一次,文件独立编译时不过报错,但是链接报错提示变量i重复定义。至此说明了extern为什么在变量前使用理由。

extern还可用在函数前。函数声明和函数定义也要弄清楚。函数声明和定义有显著区别(定义有具体函数实现),extern可以可用或者不用。

函数display声明

     void display();

       extern  void display();

函数display定义;

    void display(){

       printf(“aa”);

}

extern void display(){

       printf(“aa”);

}

源文件1中有display函数的定义,同时头文件1中有函数声明。要想在源文件2中使用源文件1中函数display前,有两种方法。第一种方法是#include头文件1。第二种方法是可以直接在使用前对display函数进行声明。

 

[1] C语言模块化编程(我见过最好的) http://wenku.baidu.com/view/dd9827ebad51f01dc381f134.html

[2] C语言深度解剖,陈正冲,第七章,文件结构

【3】 百度百科http://baike.baidu.com/link?url=ov19G5FkFi8B5A49GCyagMOM2ZTUTfpxWMxqyRqOyGcG0KO285rU23TCUWSYRieu

 

extern c 用法解析

  • 2015年03月11日 12:49
  • 25KB
  • 下载

extern "C"的用法解析

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言, C++保留了一部分过...

extern "C"用法解析

昆山安诺伊精密模具有限公司

extern "c"用法解析

C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 exte...

extern "c"用法解析

引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 ...

extern "c"用法解析

引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 ...

extern "c"用法解析

1、问题引出 最近在读com本质论时,第一章关于动态链接库调用缺点中提到了extern “c"的用法,顿时很不解,后来网上查资料了解到标准C++头文件中都会包含以下内容: #ifndef __IN...

extern "C"的用法解析

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言, C++保留了一部...

extern "C"的用法解析——转载

1.引言   C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言, C++保留了一部...

extern "C"的用法解析

extern "C"的用法解析   http://blog.sina.com.cn/u/494a1ebc010004g5   C++中extern “C”含义深层探索            ...
  • yarsen
  • yarsen
  • 2013年07月17日 17:26
  • 573
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:extern用法解析
举报原因:
原因补充:

(最多只允许输入30个字)