宏与const区别 extern 和 static的区别

好多人开发久了,基本的一些东西都比较模糊了。
我今天来讲讲宏与const的区别

    1.在编译时刻 宏:是预编译  const:在编译的时候
    2.编译检查  宏:不会检查错误  cons: 会做编译检查
    3.宏:可以定义代码
    4.宏的坏处: 编译时间过长   const只编译一次  大大减少编译时间  因此常用字符串常量用const

这里讲一点:如果你想你的项目编译的快点,就不要把大量的字符串定义为宏,要学苹果 多用const 定义为只读常量 

在讲讲他们的使用

宏的使用

 1.常用的字符串定义为宏
 2.常用的代码用 宏

const的使用

  1.仅仅用来修饰右边的变量(只能修饰变量: 基本变量,指针变量,对象变量)
   2.用const修饰的变量 表示只读变量 而不是常量
 在开发中的使用
    1.定义一个只读全局变量
    2.方法中定义只读参数

关于const 修饰右边变量之谜
其实很简单,主要记住 一个cosnt只能修饰一个变量(变量分为:基本变量,指针变量,对象变量)

   int const num = 20; 与   const int num = 20; 是没区别的 都是修饰基本变量num   num都不能修改

  int * const p = ∑ //  p: 是只读变量 *p:变量
  const int *p = ∑ // *p:只读变量  p 可以改;
  int const * const p = ∑ //*p p 都是只读
   const int * const p = ∑//*p p 都是只读

搞懂上面四个语句 你就能搞清楚了

const 和 static 连用

表示 静态全局只读变量
如:static NSString * const identifer = @"identifer";

顺便说说 static 和 extern

 extern
    1.声明一个全局变量,不能定义变量
    注意:extern修饰的变量不能初始化

 static作用
 1.修饰局部变量
    *延长局部变量的生命周期  只要程序运行,局部变量就会一直存在
    *局部变量只会分配一次内存 为什么?用static修饰的代码,只会在程序一启动就会执行,以后就不会执行了
(我猜想 如果想app启动快 尽量少定义static修饰的代码 不知道对不对)
 2.修饰全局变量
    *只会修改全局变量的作用域,表示只能在当前文件中使用

一般开发中 也有 extern与 const的连用

一般开发这么使用
extern NSString *const AppKey;
NSString *const AppKey = @"jurirj";

但是切记要单独建一个 全局变量的文件 比如 globalConst文件
里面放全部变量  防止不同的小伙伴定义的全局常量重名



你可能感兴趣的:(宏与const区别 extern 和 static的区别)