热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

extern与static的用法与区别

1.extern的用法:extern可以声明其他文件内定义的变量。在一个程序里,一个对象只能定义一次,它可以有多个声明,但类

1.extern的用法:
extern可以声明其他文件内定义的变量。
在一个程序里,一个对象只能定义一次,
它可以有多个声明,但类型必须完全一样。
如果定义在全局作用域或者名字空间作用域
里某一个变量没有初始化,它会被按照默认方式初始化。
将变量或函数声明成外部链接,即该变量或函数名在其
它函数中可见。被其修饰的变量(外部变量)是静态分配
空间的,即程序开始时分配,结束时释放。
在C++中,还可以指定使用另一语言链接,需要与特定的
转换符一起使用。
extern “C” 声明语句
extern “C” { 声明语句块 } 
extern 表明该变量在别的地方已经定义过了,在这里要使
用那个变量.
static 表示静态的变量,分配内存的时候, 存储在静态区,
不存储在栈上面.
static 作用范围是内部连接的关系,和extern有点相反.
它和对象本身是分开存储的,extern也是分开存储的,
但是extern可以被其他的对象用extern 引用,而static 
不可以,只允许对象本身用它


2.static的用法: 
静态变量作用范围在一个文件内,程序开始时分配空间,
结束时释放空间,默认初始化为0,使用时可以改变其值。 
静态变量或静态函数只有本文件内的代码才能访问它,
它的名字在其它文件中不可见。 
用法1:函数内部声明的static变量,可作为对象间的一种
通信机制 
如果一局部变量被声明为static,那么将只有唯一的一个
静态分配的对象,它被用于在该函数的所有调用中表示这
个变量。这个对象将只在执行线程第一次到达它的定义使
初始化。 
用法2:局部静态对象 
对于局部静态对象,构造函数是在控制线程第一次通过该
对象的定义时调用。在程序结束时,局部静态对象的析构
函数将按照他们被构造的相反顺序逐一调用,没有规定确
切时间。 
用法3:静态成员和静态成员函数 
如果一个变量是类的一部分,但却不是该类的各个对象的
一部分,它就被成为是一个static静态成员。一个static
成员只有唯一的一份副本,而不像常规的非static成员那
样在每个对象里各有一份副本。同理,一个需要访问类成员
,而不需要针对特定对象去调用的函数,也被称为一个static
成员函数。 
类的静态成员函数只能访问类的静态成员(变量或函数)


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 在API测试中,我们常常需要通过大量不同的数据集(包括正常和异常情况)来验证同一个接口。如果为每种场景单独编写测试用例,不仅繁琐而且效率低下。采用数据驱动的方式可以有效简化这一过程。本文将详细介绍如何利用CSV文件进行数据驱动的API测试。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
author-avatar
boybeta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有