美文网首页
const、static、extern 在头文件中似的情况小结

const、static、extern 在头文件中似的情况小结

作者: 三三At你 | 来源:发表于2017-05-11 21:29 被阅读0次

const C语言中const修饰的变量存在静态区,c++中存在代码区不占内存。
在头文件中定义

//test.h  
#ifndef _TEST_H_  
#define _TEST_H_  
const int a = 0;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个const int a=0;存放在不同地址单元不是全局变量  
#endif  

static //存放在静态区
在头文件中定义

//test.h  
#ifndef _TEST_H_  
#define _TEST_H_  
static int a = 1;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个static int a=1;存放在不同地址单元也不是全局变量  
#endif  

extern //全局变量存放在静态区
在头文件中定义

//test.h

#ifndef _TEST_H_  
#define _TEST_H_  
extern int a;//这是可行的,在编译阶段,每个包含test.h的文件会生成一个extern int a;存放在同一地址单元是全局变量              //正确用法  
//使用的时候首先在其中一个".c"文件定义int a; 之后才可以正确运行,因为extern 的含义是变量定义在别的位置。但如果不在其中一个文件定义int a;这表示a不存在。  
//所以没有意义。  
extern int a=0;//这是可行的,相当于int a = 0,但是多个头文件包含是会发生重定义问题                         //错误用法  
#endif  

在头文件中的类中使用

#ifndef TEST_H  
#define TEST_H  
  
  
class test  
{  
public:  
    const static int a=10;//在其他文件使用 直接使用 cout<<<test::a; 相当于全局常量  
   // static int a;//在其他文件使用 先声明 extern int test::a; test::a=10; cout<<a; 相当于全局变量  
    //const int a=0;//不能直接使用  
public:  
    test();  
    virtual ~test();  
protected:  
private:  
};  
#endif // TEST_H  

相关文章

网友评论

      本文标题:const、static、extern 在头文件中似的情况小结

      本文链接:https://www.haomeiwen.com/subject/qujatxtx.html