`
mylove2060
  • 浏览: 330619 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

C/C++中extern用来声明全局变量

阅读更多
声明:在某个头文件1.h(可以在同一文件中或同一程序的不同文件中出现多次 );

定义:在任何一个源文件x.cpp(只能定义一次!#include<1.h>) ;

使用:要使用这个全局变量,只要包含1.h就行了。

在全局域中定义的对象 如果没有指定显式的初始值 则该存储区被初始化为 0 因此下面两个定义中 var1和 var2有相同的初始值 0


int var1 = 0;

int var2;

关键字extern为声明但不定义一个对象提供了一种方法 实际上它类似于函数声明承诺了该对象会在其他地方被定义 或者在此文本文件中的其他地方 或者在程序的其他文本文件中 例如

extern int i;

对程序来说是一个 保证 表示在其他某个地方存在一个如下所示的定义

int i;

extern声明不会引起内存被分配 它可以在同一文件中或同一程序的不同文件中出现多次 典型情况下 全局对象的声明只在公共的头文件中出现一次

当一个程序文件需要引用这个全局对象时 它可以包含这个头文件

// 头文件

extern int obj1;

extern int obj2;

// 文本文件

int obj1 = 97;

int obj2;

既指定了关键字 extern 又指定了一个显式初始值的全局对象声明将被视为该对象的定义 编译器将会为其分配存储区 而且该对象后续的定义都被标记为错误 例如

extern const double pi = 3.1416; // 定义

const double pi; // 错误: 重复定义 pi

关键字 extern也可以在函数声明中指定 惟一的影响是将该声明的隐式属性 在其他地方定义 变为显式的 这样的声明有下列形式

extern void putValues( int*, int )

一般是在一个源文件如1.cpp里定义变量, 如 CString str;(这是定义,只能有一个定义)

在其他文件中要用使用时,可以在头文件如1.h里声明: extern CString str;(声明,可以有多处),然后include “1.h”就行了,不用再定义,否则定义重复,也可以不用声明;include “1.h”中已经声明。

例如:

-----------------------------------------

1.h  源码:

extern CString str;//这是声明,表示这个变量在其他文件里有定义,这里是1.cpp.一定要有个文件里有它的定义。

……

------------------------------------------

1.cpp  源码:

include “1.h”

……

CString str;  // 定义

……

-----------------------------------------

2.cpp  源码

include “1.h”  // 声明了变量CString str,并且在 1.cpp里定义了

str = "……";    // 直接使用,include “1.h”中已经声明。

-----------------------------------------

.h文件  里若没有extern ,表示定义;

.cpp文件里有相同定义就是重复定义了;

.h文件里加了extern 后,表示声明,要有地方有它的定义(实现)。



本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2009-08/21129.htm
分享到:
评论

相关推荐

    C/C++语言中全局变量重复定义问题的解决方法

    在C语言中使用extern 关键字来定义全局变量的时候,我们需要在.h文件和.c文件中重复定义,这种重复,导致了出错几率的增加。 今天,在整理自己的代码的时候,考虑到我写的代码从一至终都是在一个cpp文件里面。于是,...

    C/C++ 中extern关键字详解

    在C/C++编程过程中,经常会进行变量和函数的声明和定义,各个模块间共用同一个全局变量时,此时extern就派上用场了。 定义 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此...

    C++中的extern声明变量详解

    1、声明全局变量 2、声明函数 今天我们只谈extern,什么const、static之类等等与之相关或不相关的一律忽略,下面就分别对以上两种情况一一讲解 声明和定义 既然提到extern声明变量,那我们就必须搞清楚声明和定义的...

    static,extern,全局变量的引用(c_c++)

    讲述了static,extern及全局变量的用法,通过实例讲解,上机运行通过,放心使用

    C/C++笔试题(附答案,华为面试题系列)

    答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...

    全局 变量 extern

    不能在头文件.h里面定义全局变量,如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到include这个地方的. ...

    C/C++笔试题集锦

    部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在...

    C/C++中的static和extern关键字

    static关键字:static可以用于修饰局部变量以扩展局部变量的生存期。extern关键字:只能用于扩展没有被static关键字修饰的全局变量。

    C++中extern关键字使用

     方法一、全局函数和变量在devVar.c文件中实现,在extern.cpp文件中使用extern关键字声明在devVar.c文件中定义的函数和变量。  devVar.c文件的代码如下所示:  #include  int i = 1;  void func()  { ...

    深入理解extern用法

    l声明extern关键字的全局变量和函数可以使得它们能够跨文件被访问。 我们一般把所有的全局变量和全局函数的实现都放在一个*.cpp文件里面,然后用一个同名的*.h文件包含所有的函数和变量的声明。如:如果将Demo.cpp写...

    浅谈C/C++中的static与extern关键字的使用详解

    一.C语言中的static关键字在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该...

    extern c 用法解析

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

    华为、中兴C.C++笔试面试知识点

    全局变量的默认方式,当在一个文件中要引用另一个文件中的全局变量或在全局变量定义之前要引用它时,可用extern作说明,相当于扩大全局变量的作用域。 2、静态(static)存储类别 它仅能在本文件中引用,即使在其它...

    全局变量、extern、static、const区别与联系.doc

    C++知识点: 全局变量、extern、static、const区别与联系.doc

    extern关键字的作用.docx

    extern 是 C 和 C++ 语言中的一个关键字,它可以用来声明变量和函数作为外部变量或者函数供其它文件使用。extern 可以置于变量或者函数前,以表示这个变量或函数定义在别的文件中,提示编译器在遇到此变量或函数的...

    C/C++中作用域详解

    如果在一个文件中使用extern关键字来声明另一个文件中存在的全局变量,那么这个文件可以使用这个数据。  (2) 局部变量:  局部变量出现在一个作用域内,它们是局限于一个函数的。局部变量经常

    c++面试试题大全

    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题?它是什么意思? 微软亚洲技术中心的面试题 慧通面试题

    c代码-extern 修饰符用于当有两个或多个文件共享相同的全局变量或函数的时候

    c代码-extern 修饰符用于当有两个或多个文件共享相同的全局变量或函数的时候

    基于C++全局变量的声明与定义的详解

    (1)编译单元(模块)在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;...(2)声明与定义函数或变量在声明时,并没有给它

Global site tag (gtag.js) - Google Analytics