变量声明和定义及extern、static、const

1. 声明与定义的区别

    一般来说我们把分配变量(函数)地址和存储空间的称为定义,不分配地址的称为声明。声明只是告诉编译器,有这个变量(函数),具体在哪里让它自己去找对同一个变量(函数)的声明可以有多次,而定义只能有一次!所有头文件中一般都是变量(函数)的声明,头文件中一般都是变量(函数)的声明定义(const修饰的变量除外)。

2. extern

        extern有两个作用。

        第一个,与"C"一起连用,如: 

extern "C" void fun(int a, int b); 

        告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的, C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这取决于编译的规则,主要是为了支持函数重载。

       第二个, 置于变量(函数)名前,如:

 extern int nExistValue; 

       告诉编译器,其后的变量(函数)已经在其他地方中被定义了,并且把该变量(函数)的作用域扩展到该语句所在的作用域。 

注意:当变量带初始化式时,就算前面有extent,也是一个定义。即extent相当于没有。

3.static

        static修饰变量时,告诉编译器,该变量保存在内存的静态区。即便函数运行结束,而静态变量的值都不会被销毁,以后仍然还可以继续使用。未指定初始值的静态变量会被程序自动初始化为0。

        static修饰的函数和变量都只能在本编译单元中使用。

注意:static与extern“水火不容”,也就是说extern和static不能同时修饰一个变量。

4.const

        const修饰的变量在定义时必须被初始化,其后不能被修改。const最初是用来代替define的。define是宏定义,在预编译期简单的替换,不会进行类型检查,而且define没作用域的限制。const修饰的是一个不能被修改的变量,本质上还是一个变量,会进行类型检查,也有作用域的限制。

        在类的成员函数中,可用const修饰函数,如:

class classname { 
 public: 
  int fun() const; 
 ..... 
} 

       表示该函数不会修改该类的成员变量。

作者:xiaoxibo 发表于2011-7-24 1:47:38 原文链接
阅读:51 评论:0 查看评论

原文链接: https://www.cnblogs.com/xiaoxibo/archive/2011/07/24/2212611.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    变量声明和定义及extern、static、const

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/29246

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午6:40
下一篇 2023年2月8日 上午6:40

相关推荐