`
hesihua
  • 浏览: 233707 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

c++中的static extern关键字

    博客分类:
  • c++
 
阅读更多

static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性。extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。本文主要介绍C/C++中的static和extern关键字。

 

 

static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性。extern, "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。

一.C语言中的static关键字

在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。

(1)修饰局部变量

一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。

在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。

如:

  1. #include<stdio.h>  
  2. void fun()  
  3. {   
  4. static int a=1; a++;   
  5. printf("%d\n",a);  
  6. }  
  7. int main(void)  
  8. {   
  9. fun();   
  10. fun();   
  11. return 0;  
  12. }  

程序执行结果为: 2  3

说明在第二次调用fun()函数时,a的值为2,并且没有进行初始化赋值,直接进行自增运算,所以得到的结果为3.

对于静态局部变量如果没有进行初始化的话,对于整形变量系统会自动对其赋值为0,对于字符数组,会自动赋值为'\0'.

(2)修饰全局变量

对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。

如:

  1. //有file1.c  
  2. int a=1;  
  3. file2.c  
  4. #include<stdio.h>  
  5. extern int a;  
  6. int main(void)  
  7. {  
  8. printf("%d\",a);  
  9. return 0;  

 

则执行结果为 1

但是如果在file1.c中把int a=1改为static int a=1;

那么在file2.c是无法访问到变量a的。原因在于用static对全局变量进行修饰改变了其作用域的范围,由原来的整个工程可见变为本源文件可见。

(3)修饰函数

用static修饰函数的话,情况与修饰全局变量大同小异,就是改变了函数的作用域。

二.C++中的static

在C++中static还具有其它功能,如果在C++中对类中的某个函数用static进行修饰,则表示该函数属于一个类而不是属于此类的任何特定对象;如果对类中的某个变量进行static修饰,表示该变量为类以及其所有的对象所有。它们在存储空间中都只存在一个副本。可以通过类和对象去调用。

三.extern关键字

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
在上面的例子中可以看出,在file2中如果想调用file1中的变量a,只须用extern进行声明即可调用a,这就是extern的作用。在这里要注意extern声明的位置对其作用域也有关系,如果是在main函数中进行声明的,则只能在main函数中调用,在其它函数中不能调用。其实要调用其它文件中的函数和变量,只需把该文件用#include包含进来即可,为啥要用extern?因为用extern会加速程序的编译过程,这样能节省时间。

在C++中extern还有另外一种作用,用于指示C或者C++函数的调用规范。比如在C++中调用C库函数,就需要在C++程序中用extern “C”声明要引用的函数。这是给链接器用的,告诉链接器在链接的时候用C函数规范来链接。主要原因是C++和C程序编译完成后在目标代码中命名规则不同,用此来解决名字匹配的问题。

 

上文摘抄自:http://developer.51cto.com/art/201104/256820.htm

分享到:
评论

相关推荐

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

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

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

    在C/C++编程语言中,`static`和`extern`关键字扮演着至关重要的角色,它们影响着变量和函数的存储、生命周期以及作用域。下面将详细阐述这两个关键字的使用和意义。 首先,我们来看`static`关键字。在C语言中,`...

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    Extern关键字的作用是告诉编译器,有一个变量或函数,它可能不存在当前的文件中,但它肯定要存在于工程中的某一个源文件中或者一个DLL的输出中。 例如: ```c extern int a; ``` 五、auto关键字 Auto关键字的作用...

    extern关键字的作用extern的用法,本文较详细的介绍了extern的用法及注意事项.zip

    3. 跨语言互操作:在多语言混合编程中,`extern`关键字可以帮助C#代码调用由其他编程语言(如C++)编写的函数。 二、`extern`关键字的用法 1. 声明方法:`extern`关键字放在方法声明前,告诉编译器这是一个外部...

    C++面试基础之static关键字详解

    C++面试基础之static关键字详解 本文主要讲解了C++面试基础之static关键字的相关知识点,通过示例代码介绍了static...static关键字和extern关键字都是C++中的重要关键字,正确地使用它们可以使程序更加高效、可靠。

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

    通过对`static`、`extern`以及全局变量引用的介绍和分析,我们可以清楚地认识到这些概念在C/C++编程中的重要性。合理地使用这些特性可以帮助我们更好地管理程序中的数据共享问题,同时也能提高程序的可读性和可维护...

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

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,...

    C++中的关键字解析

    ### C++中的关键字解析 #### 一、保留字与关键字 C++中存在大量预定义的标识符,这些标识符通常被称为保留字或关键字。它们具有特定的意义,并且被编译器用来识别语言结构的不同部分。例如,在C++中,“`auto`”、...

    C++语言中的static和extern

    C++语言中的static和extern 在C++语言中,static和extern是两个...static和extern关键字在C++语言中扮演着非常重要的角色,它们可以用来定义静态全局变量、静态局部变量和静态函数,并且可以用来实现一些特定的功能。

    C++关键字大全(67个).txt

    C++关键字大全(67个) asm auto bad_cast bad_typeid bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum except explicit extern false finally float ...

    extern在C和C++中的作用

    在程序设计领域,尤其是在C和C++这两种广泛使用的编程语言中,理解和掌握关键字`extern`的使用方法至关重要。`extern`关键字用于声明一个变量或函数是在当前源文件之外定义的。这有助于在多个源文件之间共享数据和...

    C++常用的编程关键字.md

    本文将详细介绍C++中常用的编程关键字及其作用,并通过一个简单的示例程序展示这些关键字的实际应用。 #### 二、C++常用编程关键字及其作用 ##### 1. `auto` - **用途**:用于声明变量时自动推断变量的类型。 - **...

    extern和static的详细用法

    extern关键字的作用 - **作用一**:与`"C"`连用时,用于指示编译器以C语言的方式编译函数名,而非C++默认的方式。C++支持函数重载,因此如果不使用`extern "C"`,在不同编译单元间调用C库函数可能会导致链接错误。...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile ...通过以上的介绍可以看出,`const`、`extern`、`static` 和 `volatile` 这四个关键字在 C 和 C++ 中有着广泛的应用。正确地使用这些关键字可以极大地提高代码的质量和可维护性。

    C++的static关键字及变量存储位置总结

    在C++中,`static`关键字有着非常重要的作用,它主要用在两个方面:面向过程编程和面向对象编程。在面向过程编程中,`static`主要用于全局变量和局部变量,而在面向对象编程中,它主要涉及到类的成员变量和成员函数...

    C语言32以及C++63个关键字及其含义[定义].pdf

    C语言32个关键字及其含义和C++63个关键字及其含义 C语言32个关键字及其含义: 1. auto:自动变量用关键字auto作存储类别的声明。(可以省略,不写则隐含确定为“自动存储类别”) 2. break:不能用于循环语句和...

    c++关键字分析

    在深入探讨C++中的`const`与`static`关键字及其链接属性之前,我们先来简要回顾一下这两个关键字的基本概念。 ### `const`关键字 `const`关键字在C++中用于声明常量或指定对象的某些部分是不可修改的。这可以应用...

    c++笔试题目(多看点没错)

    本文对C++笔试题目进行了详细的解析,涵盖了static关键字的作用、变量的存储域、实时系统的基本特性、平衡二叉树、堆栈溢出、虚函数、冒泡排序算法、浮点数比较、网络协议、IP地址转换、局部变量和全局变量的区别、...

Global site tag (gtag.js) - Google Analytics