• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 基于C++全局变量的声明与定义的详解

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++中全局变量,c++全局变量,c++定义全局变量,c++全局变量的使用,c++如何定义全局变量等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
(1)编译单元(模块)
在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:
第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;
第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。
那么,错误可能在两个地方产生:
一个,编译时的错误,这个主要是语法错误;
一个,链接时的错误,主要是重复定义变量等。
编译单元指在编译阶段生成的每个obj文件。
一个obj文件就是一个编译单元。
一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元。
一个工程由很多编译单元组成,每个obj文件里包含了变量存储的相对地址等。
(2)声明与定义
函数或变量在声明时,并没有给它实际的物理内存空间,它有时候可保证你的程序编译通过;
函数或变量在定义时,它就在内存中有了实际的物理空间。

如果你在编译单元中引用的外部变量没有在整个工程中任何一个地方定义的话,那么即使它在编译时可以通过,在连接时也会报错,因为程序在内存中找不到这个变量。
函数或变量可以声明多次,但定义只能有一次。
(3) extern作用
作用一:
当它与"C"一起连用时,如extern "C" void fun(int a, int b);,则编译器在编译fun这个函数名时按C的规则去翻译相应的函数名而不是C++的。
作用二:当它不与"C"在一起修饰变量或函数时,如在头文件中,extern int g_nNum;,它的作用就是声明函数或变量的作用范围的关键字,其声明的函数和变量可以在本编译单元或其他编译单元中使用。
即B编译单元要引用A编译单元中定义的全局变量或函数时,B编译单元只要包含A编译单元的头文件即可,在编译阶段,B编译单元虽然找不到该函数或变量,但它不会报错,它会在链接时从A编译单元生成的目标代码中找到此函数。
(4)全局变量(extern)
有两个类都需要使用共同的变量,我们将这些变量定义为全局变量。比如,res.h和res.cpp分别来声明和定义全局变量,类ProducerThread和ConsumerThread来使用全局变量。(以下是QT工程代码)
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别
  • C++面试题之数a、b的值互换(不使用中间变量)
  • 简单介绍C++中变量的引用
  • 深入理解C++中变量的存储类别和属性
  • 深入理解C++编程中的局部变量和全局变量
  • C++ 中滚动条的滚动问题
  • C++中指向结构体变量的指针
  • C++多文件变量解析
  • 浅析C/C++变量在内存中的分布
  • 基于C++全局变量的声明与定义的详解

相关文章

  • 2017-05-28linux下C语言中的mkdir函数与rmdir函数
  • 2017-05-28C++模板类的用法实例
  • 2017-05-28C++设置系统时间及系统时间网络更新的方法
  • 2017-05-28C语言获取消耗内存的方法
  • 2017-05-28C语言中while与do-while的介绍与注意事项
  • 2017-05-28浅谈C语言共用体和与结构体的区别
  • 2017-05-28实例讲解C++编程中lambda表达式的使用
  • 2017-05-28判断本机office安装版本的方法分享
  • 2018-08-06VS2010 C++程序调用C#库
  • 2017-05-28基于VC实现的网络监听功能程序实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++ STL容器stack和queue详解
    • C语言中字符串常用函数strcat与strcpy的用法介绍
    • C++ 中约瑟夫环替换计数器m(数组解决)
    • 基于SVN源码服务器搭建(详细教程分析)
    • java 中ArrayList与LinkedList性能比较
    • 素数判定算法的实现
    • c++统计文件中字符个数代码汇总
    • C++输入输出操作符重载的深入分析
    • Linux编程实现制作文件的ed2k链
    • ipv6实现tcp编程示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有