//内存 栈区 与 static区 ,C++为了兼容C,#include 只是文本替换,导致一堆命名空间之间的复杂问题,倍受人诟病

extern  关键字

1.基本含义:意如其名,告诉编译器声明的东西是外部的。

特殊用法  extern "C" + 函数,声明这个函数翻译优化的时候 函数名 不改变(c++因为多态等原因,会改变函数名)

2. 声明变量用法:

 (1) 1.c 中 char a[6];  2.c 中 extern char a[];

(2)   1.c 中 char a[6];1.h中 extern char a[];  2.c中 #include ''1.h" 即可访问 a;(以头文件声明,来代替每次在其他文件中声明)

(3) 1.c 中              ;1.h中 extern char a[6]="123456"; ; 2.c中 #inlcude “1.h” 会报错 (定义会覆盖extern关键字,显示重复定义)

3.声明函数变量用法

最好参考2中(2) 用法,这样后面 函数参数修改 后,编译期间会报错

//////////////////////////////////////////////////////////////////////////////////////////////////////

static 关键字

extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.

1.基本含义:意如其名,表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.

static 类似于隐藏,声明即需要定义,只有一个副本,只能在本身的编译单元内使用

extern部分 2 中(3)方法若将extern 替换成 static ,则可以编译通过,此时在2个编译单元中 都有一份 副本(互不相干);但是会带来很多问题,

因此 static 声明与定义 一般放在 .c 文件中

2. c语言中使用

修饰变量,函数  同 1 中说明

修饰 函数中变量,这个比较特殊,肯定是放在静态区,生命周期是到程序结束!!

3. c++语言中使用,主要是类中

修饰成员变量,成员函数 属于类所有,一个副本

/////////////////////////////////////////////////

const 关键字

1. const 自带属性 是 static 声明即需要定义,只有一个副本,只能在本编译单元内使用

2. extern const 属性 是 extern

3. const int * const p ;

4. 给定一个 类 class A,可能存在使用const的地方,第一行编号为 1,2,3,4,5,6,第二行编号为11,22,33,44,55,66

A a1(类变量),           普通成员函数    , 普通类成员  , 普通成员  ,   普通函数参数   ,  普通返回参数

const A a1(类常变量);const 成员函数 ;const 类成员, const 成员,   const函数参数  , const 返回参数

普通成员函数 表示,我将要修改调用该函数的对象的数据

const成员函数 表示,  不会修改调用该函数的对象的数据  (实在要修改,可以将某个成员变量设定为 mutable )

正确的访问逻辑是:

const成员函数 可以访问一切,普通成员函数不能访问 const对象任何成员

const类对象 只能访问 const成员函数,普通类对象 可以访问一切

const成员,必须在初始化列表中初始化

作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改, 应尽可能将该成员函数声明为const成员函数

5 const &: 把不变的给 可变 的是有问题的

///////////////////////////////////////

volatile : 防止编译器优化,有点复杂

最新文章

  1. 【SAP业务模式】之ICS(六):发票输出类型
  2. [板子]倍增LCA
  3. 如何基于Azure平台实现MySQL HA(方法论篇)
  4. MongoDB学习
  5. Putty远程登录VMware虚拟机Linux(Ubuntu)
  6. Java开源数据库管理工具
  7. Codeforces Round #243 (Div. 2) B(思维模拟题)
  8. 【暑假】[实用数据结构]UVa11235 Frequent values
  9. Python 实时日志平台 Sentry
  10. UVA 6480 Zombie Invasion(模拟退火)
  11. Javascript学习4 - 对象和数组
  12. 昨天CSAPP上的疑问的解答
  13. java基础第二天
  14. R与并行计算(转)
  15. 非Controller中调用Service
  16. 使用正则移除尖括号<>中的指定子字符串
  17. BZOJ 2169
  18. ES启动报错之引导检测失败
  19. apk的安装删除
  20. 搭建ldap自助修改密码系统--Self Service Password

热门文章

  1. 升级安装APK兼容Android7.0,解决FileUriExposedException
  2. Java开发各层对象专用名词含义 PO,VO,DAO,BO,DTO,POJO, BYO,Entity,JavaBean,JavaBeans
  3. /dev/null 2>&1 解释
  4. mybaits插入时的一些总结
  5. python装饰器1
  6. Junit4简单使用
  7. c语言数据类型(二)
  8. 升级Android Studio到1.0.2的问题解决
  9. Elasticsearch 2.4 安装
  10. 《SDN软件定义网络从入门到精通》导论课