`
mylove2060
  • 浏览: 335876 次
  • 性别: 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++ 跨文件共享全局变量Demo

    但是,当涉及到多个源文件时,单纯地在每个文件中声明全局变量是无法实现跨文件共享的,因为每个源文件都有自己的作用域。 要跨文件共享全局变量,我们需要遵循以下步骤: 1. **定义全局变量**:在其中一个源文件...

    在C/C++项目中使用全局变量的方法

    ### 在C/C++项目中使用全局变量的方法 #### 概述 在开发C/C++项目时,有时需要在多个源文件之间共享数据或状态信息。全局变量作为一种简单且直观的数据共享方式,在某些场景下非常实用。然而,不当的使用全局变量...

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

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

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

    ### static、extern以及全局变量的引用(C/C++) #### 一、引言 在C/C++编程语言中,变量的存储类型对于程序的行为有着重要的影响。存储类型的正确选择不仅能够帮助开发者更好地组织代码,还能有效地减少内存资源...

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

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

    DSP编程技巧之--从C/C++代码调用汇编代码中的函数与变量

    调用汇编全局变量类似于调用函数,需要先在汇编中声明其全局性,然后在C/C++中使用`extern`声明并引用。例如,在汇编中定义全局变量`var`: ```assembly .bss _var,1 .global _var ``` 在C/C++中调用这个变量: `...

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

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

    嵌入式C/C++语言精华文章集锦.pdf

    - **库的使用**:当使用C语言编写的库时,`extern "C"`声明是必须的,它保证了正确的符号匹配,使得C++代码能够调用C库中的函数和使用其中的变量。 #### 3. C语言高效编程的几招 在嵌入式系统中,效率至关重要,...

    华为C/C++笔试最全试题

    全局变量可以在多个`.C`文件中通过`static`关键字声明,这样每个文件都有自己的实例,互不影响,从而避免了命名冲突和链接错误的问题。 #### 无限循环的表达式 `for( ; 1; )` 表达式等同于 `while(1)`,两者都表示...

    全局变量的使用

    `extern` 关键字在C/C++语言中用于声明全局变量或者外部变量。当你在一个源文件中定义了一个全局变量,而在其他源文件中想要使用这个变量时,由于编译器默认每个源文件都是独立的,所以它不知道这个变量的存在,这时...

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

    C/C++中的static和extern关键字是两个重要的关键字,它们在变量和函数的声明和使用中扮演着重要的角色。 static关键字 static关键字可以用于修饰局部变量,以扩展局部变量的生存期。被static关键字修饰的局部变量...

    学习总结:C++中extern “C”含义深层探索.doc

    在C++编程中,`extern "C"`是一个特殊的声明,用于指示编译器按照C语言的规则处理特定的函数和全局变量,而不是按照C++的标准方式进行。这是因为C++支持函数重载和名称修饰(name mangling),而C语言不支持这些特性...

    CC++中的静态全局变量,静态局部变量,全局变量,局部变量的区别

    - 若希望全局变量仅在一个C文件中访问,将其修改为静态全局变量,有助于降低模块间的耦合度。 - 若全局变量仅由单个函数访问,可以将其改为该函数的静态局部变量,同样能降低耦合度。 - 设计和使用访问静态变量的...

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

    1. **声明全局变量**:在文件A中定义了一个全局变量,在文件B中想要使用这个变量,就需要在文件B中用`extern`声明。例如: ```c // file1.c static int a = 1; // file2.c extern int a; ``` `extern`使得文件B知道...

Global site tag (gtag.js) - Google Analytics