首页 > 其他分享 >extern和static

extern和static

时间:2024-08-17 14:48:39浏览次数:8  
标签:函数 作用域 静态 static extern 链接 变量

externstatic是C/C++中用于控制变量或函数链接性和可见性的关键字,它们各自有不同的作用。

extern

extern关键字用于声明一个变量或函数是在别的文件中定义的,或者是在本文件的其他地方定义的。它告诉编译器该变量或函数不是在本文件中定义的,而是在其他地方定义,因此编译器在链接阶段需要找到它的定义。extern通常用于以下几种情况:

  1. 全局变量的外部链接:当你在一个源文件中定义了一个全局变量,并希望在另一个或多个源文件中访问它时,你需要在那些源文件中使用extern来声明这个变量。
  2. 函数的声明:虽然函数的声明(即原型)通常不需要extern(因为默认情况下函数就有外部链接),但在某些上下文中(如老式的代码或特定的编译器/链接器行为),你可能会看到extern用于函数的声明。然而,在现代C/C++编程中,这通常是不必要的。

static

static关键字用于控制变量的存储持续时间和链接性,以及函数的链接性。它有几个不同的用途,但在这里我们主要关注其对变量和函数的影响:

  1. 局部静态变量:在函数内部声明的静态变量具有局部作用域(只能在定义它的函数内部访问),但其生命周期贯穿整个程序的执行期间。这意呀着,即使在函数执行完毕后,局部静态变量的值也会保留,并在下次函数调用时继续使用。
  2. 全局静态变量:在全局作用域(即文件作用域)中声明的静态变量具有文件作用域(即只能在定义它的文件内部访问),但具有静态存储持续时间(从程序开始到结束)。这与全局变量类似,但全局静态变量不会在其他文件中引起链接问题,因为它们是隐藏的,不会被其他文件看到。
  3. 静态函数:静态函数只能在定义它的文件内部被调用,这有助于封装和避免命名冲突。静态函数具有内部链接性,这意味着它们的标识符在链接过程中不会与其他文件中的标识符冲突。

总结

  • extern用于声明一个变量或函数是在其他地方定义的,以便在当前作用域中访问它。
  • static用于控制变量的存储持续时间和链接性(以及函数的链接性),使得变量或函数具有局部作用域或文件作用域,而不是全局作用域。对于变量,static还意味着其值在程序执行期间保持不变(对于局部静态变量而言)。

标签:函数,作用域,静态,static,extern,链接,变量
From: https://www.cnblogs.com/xiaoyaoj/p/18364380

相关文章

  • static关键字
    7.5static关键字目录7.5static关键字7.5.1static是什么7.5.2static修饰的成员变量是什么?有什么特点?7.5.3两种成员变量各自在什么情况下定义?7.5.4static修饰成员方法的基本用法7.5.6静态代码块7.5.1static是什么static是静态的意思,可以用来修饰成员变量、成员方法。......
  • C++关键字static
    1.静态成员变量:当static关键字用于类的成员变量时,意味着这个变量是类的所有实例共享的。无论类实例有多少个,静态成员变量只有一个副本。静态成员变量经常用于存储类的公共数据,如配置选项或计数器。classMyClass{public:staticintcount;//静态成员变量};intMyCl......
  • To create a new mock, the existing static mock registration must be deregistered
    1、异常提示:Tocreateanewmock,theexistingstaticmockregistrationmustbederegistered  2、原因分析由提示信息可知,静态模拟已经注册过了,再次注册时必须先将之前的撤销。所以我们要撤销之前的注册信息,再执行。这里提供另一种方法,将模拟静态的方法......
  • static关键字
    static关键字static关键字在Java中用于表示某个成员(方法、变量、常量或代码块)属于类本身,而不是类的某个特定实例。以下是static关键字的一些主要用法和特性:静态变量:使用static声明的变量是静态变量,也称为类变量。它们在类加载时创建,并在程序运行期间一直存在,直到程序结束。pu......
  • 汇编中的.text .plt .rodata .data .bss extern
    汇编语言是一种低级编程语言,用于直接控制计算机的硬件。在汇编代码中,通常会有一些特殊的段(section)来组织代码和数据。.text:这是代码段,用于存储指令。当程序被编译和链接后,所有的指令都会放在这个段中。.data:这是数据段,用于存储初始化的全局变量和静态变量。这些变量在程......
  • 修饰之神——static
    一.static三个作用1.修饰局部变量,使得局部变量的周期变长2.修饰全局变量,使得全局变量不可跨文档使用3.修饰函数下面慢慢解释二.修饰局部变量大家可以比对一下两个简单代码第一个,这一个是没有static的,结果如下第二个,这一个是加了static的,结果如下那为什么会出现这一个......
  • abstract关键字以及与public,final,static的关系 day09
    多态程序中,第一大前提要有继承关系。但是呢,比如上午写的动物案例,我们将狗,猫,猪这些具体的动物分别编写了一个类进行对应这都是没问题的。但是呢,动物本身应该是一个抽象的概念,我们在现实生活中其实是找到不到Animal的实例的。具体的事物,我们就可以使用java代码......
  • C++ 中,static 和非 static
    在C++中,static和非static的变量在作用域、生命周期和初始化方面有一些重要的区别。下面详细解释这两种变量的不同之处:非static变量inti0=123;作用域:变量i0的作用域是它所在的代码块或函数。它只能在定义它的代码块内访问。生命周期:每次进入代码块时,变量i0会被创......
  • static关键字day07
    static关键字的使用及其注意事项:1、随着类的加载而加载到静态区,优先对象而存在的,静态成员变量会被系统赋予默认值2、被static修饰的成员,又称之为类成员(被静态修饰的成员变量或者成员方法),可以直接通过类名的方式进行访问3、非静态的成员方法中既可......
  • Windows图形界面(GUI)-MFC-C/C++ - 静态文本框(Static Text) - CStatic
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​链接点击跳转博客主页目录静态文本框(StaticText)-CStatic基本概念成员函数示例代码静态文本框(StaticText)-CStatic基本概念静态文本框是一种用于显示文本的控件,用户不能编辑其中的文本。静态文本框......