iOS开发—const与预处理编译

热门标签

,

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

1.const与预处理编译的区别

  • 宏在编译之前处理,const是编译阶段
  • 宏不做检查,不会报编译错误,只是替换,const会编译检查,会报错
  • 宏能定义一些函数,方法,const不能
  • 使用大量宏会容易造成编译时间久,每次都需要重新替换
    注意:有些blog说大量使用宏会消耗很多内存,验证发现宏定义的只是常量,常量都放在常量区,只会生成一份内存,不存在会消耗很多内存

2.const作用

  • 用来修饰右边的变量为只读
// const修饰b为只读
int const b = 20;
// const修饰*p为只读
int const *p;

3.static和extern简单使用

  • static作用
    • 修饰局部变量:
      1.延长局部变量生命周期,程序结束才会销毁
      2.局部变量只会生成一份内存,只会初始化一次
    • 修饰全局变量:
      1.只能在本文件中访问,修改全局变量的作用域,生命周期不会改
  • extern作用:
    • 只是用来获取全局变量的值,不能定义变量,编译器会报错

4.static和extern与const的联合使用

  • static和const使用
    1.声明一个只读的静态变量,用来代替宏来定义一个经常使用的字符串常量
    2.事实上,这样修饰的变量,编译器不会创建符号,而是会像预处理指令一样,将所有遇到的变量都替换为常量,但是这样定义的常量有类型信息
  • extern和const使用
    1.声明一个全局变量,便于在多个文件中使用
    2.这样定义的变量会放入"全局符号表"中,所以定义名字时最好加入类名,防止冲突
    3.最好将定义的全局变量放入一个专门用于定义全局变量的头文件

总结

  • 不要用预处理指令定义常量,这样定义出来的常量不含类型信息.而且如果有人重新定义了常量值,也不会报错,会导致程序中的常量值不一致
  • 在实现文件中使用static const来定义常量.由于常量不在全局符号表中,所以无须加入类名
  • 在头文件中使用extern来声明全局变量,并在相关实现文件中定义其值.因为会出现在全局符号表中,所以名称应加入类名

还在学习中,略有错误请指出,谢谢!!

 

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS开发—const与预处理编译》 发布于2019-09-23

分享到:
赞(0) 打赏

评论 抢沙发

8 + 2 =


iOS开发—const与预处理编译

长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?