extern作为外部变量扩展的用法:

1. 主要作用是扩展变量或者函数的应用范围;

2. extern的用法是相对于全局变量而言;

3. 在看到extern这个关键字的时候说明这个变量已经在别的源文件中声明;

注意:变量的声明只能在源文件中(.cpp .c),但是对于extern声明的文件没有限制,可以在.h,也可以在.cpp中声明;

当然作为函数变量声明的用法也是一样的,只能作用于全局函数,也只能在源文件.cpp中声明;

一、extern作为外部变量的用法:

Func.h

#pragma once
class Func
{
public:
Func();
~Func(); void printX();
};

Func.cpp

#include "Func.h"
#include <stdio.h> int x;
Func::Func()
{
x = ;
} Func::~Func()
{
} void Func::printX()
{
printf("value of x in Func is %d", x);
}

FuncExtern.h

#pragma once

extern int x;
class FuncExtern
{
public:
FuncExtern();
~FuncExtern(); void printXExtern();
};

FuncExtern.cpp

#include "FuncExtern.h"
#include <stdio.h> FuncExtern::FuncExtern()
{
} FuncExtern::~FuncExtern()
{
} void FuncExtern::printXExtern()
{
printf("value of x in FuncExtern is %d", x);
}

main.cpp

#include <stdio.h>
#include <string.h>
#include "Func.h"
#include "FuncExtern.h" int main()
{
Func *base = new Func();
base->printX();
FuncExtern *externFunc = new FuncExtern();
externFunc->printXExtern(); return 0;
}

输出结果为:

二、extern作为外部函数的用法:

Func.h

#pragma once

class Func
{
public: Func();
~Func(); };

Func.cpp

#include "Func.h"
#include <stdio.h> void printX()
{
int x = 5;
printf("value of x in Func is %d\n", x);
} Func::Func()
{
} Func::~Func()
{
}

 FuncExtern.h

#pragma once

extern void printX();
class FuncExtern
{
public:
FuncExtern();
~FuncExtern(); void printXExtern();
};

FuncExtern.cpp

#include "FuncExtern.h"
#include <stdio.h> FuncExtern::FuncExtern()
{
} FuncExtern::~FuncExtern()
{
} void FuncExtern::printXExtern()
{
printX();
}

main.cpp

#include <stdio.h>
#include "Func.h"
#include "FuncExtern.h" int main()
{
FuncExtern *externFunc = new FuncExtern();
externFunc->printXExtern(); return 0;
}

输出结果为:

通过以上分析我认为extern唯一的用法是你能使用一个文件里全局变量而不需要include这个头文件;

C++基础--extern的用法的更多相关文章

  1. extern "c"用法解析

    转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...

  2. 《OOC》笔记(1)——C语言const、static和extern的用法

    <OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...

  3. extern的用法

    extern作为外部函数声明的用法: 1. 可以扩展函数的应用范围: 107.h #ifndef _107H_ #def _107H_ extern void func(); #endif 107.c ...

  4. EasyUI中Base(基础)的基本用法

    EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizab ...

  5. extern "C" 用法解析

    extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...

  6. 变量的声明和定义以及extern的用法

    变量的声明和定义以及extern的用法                                          变量的声明不同于变量的定义,这一点往往容易让人混淆. l         变量 ...

  7. 关于extern的用法

    extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...

  8. static和extern的用法小结

    以前写程序是,基本不管static和extern,一个工程文件也只有一个c文件.今天尝试用多个文件来写,自然就涉及到这两个关键词的使用,自己查了些资料,并且做了些实验,总结如下. extern的用法 ...

  9. scrapy之基础概念与用法

    scrapy之基础概念与用法 框架 所谓的框架就是一个项目的半成品.也可以说成是一个已经被集成了各种功能(高性能异步下载.队列.分布式.解析.持久化等)的具有很强通用性的项目模板. 安装 Linux: ...

随机推荐

  1. C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析

    看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...

  2. PHP编程入门与应用

    基础语法.流程控制语句.数组的应用.字符串的应用————3天 PHP函数————3天 面向对象————3天 文件处理————2天 获取页面数据.会话处理————3天 数据库————5天 XML和JSO ...

  3. SOAP XML报文解析

    import java.util.HashMap;import java.util.List;import java.util.Map; import org.dom4j.Document;impor ...

  4. struts2学习笔记(三)—— struts2的常见配置

    一.配置文件的加载顺序 每次从客户端发送请求到服务器都要先经过Struts2的核心过滤器StrutsPrepareAndExecuteFilter,这个过滤器有两个功能:预处理和执行.在预处理中主要就 ...

  5. fluent中UDF环境变量问题的三种解决方法

    方法一: 这种方式最简便,首选这种,但是有时会因为不明原因而不好使,我自己电脑刚开始用这种方式是行得通的,但是后来中途装过很多乱七八糟的软件,估计环境变量改乱了,这时候只能用第二种或者第三种方法.先说 ...

  6. mfix添加文件后重新生成configure文件

    mfix给了一些程序接口,大部分时候只用修改现有程序即可满足要求,这种情况不用修改configure文件,但是如果添加了新文件就需要做一些修改. 我用了Jian Cai的程序尝试了一下编译,该学者在2 ...

  7. Pollard_Rho 整数分解法【学习笔记】

    引文:如果要对比较大的整数分解,显然之前所学的筛选法和是试除法都将不再适用.所以我们需要学习速度更快的Pollard_Rho算法. 算法原理: 生成两个整数a和b,计算p=gcd(a-b, n),知道 ...

  8. HihoCoder - 1172 SG函数应用

    原文讲解很nice,我尝试换种观点 设背面朝上为F,否则T, 那么局面FFFFFF肯定为0 局面FTFFFF可以转为上面局面0,设为1 局面FFTFFF可以转到0,1,设为2 子游戏SG(x)=x 对 ...

  9. apache 2.4 访问权限配置

    在apache 2.4里,访问权限配置与2.2不同,如果设置不对,则会报403错误,日志中会报 AH01630: client denied by server configuration.   [S ...

  10. [转] node.js如何获取时间戳与时间差

    [From] http://www.jb51.net/article/89767.htm Nodejs中获取时间戳的方法有很多种,例如: 1.new Date().getTime()  2.Date. ...