美文网首页
const、static、define

const、static、define

作者: 叔叔不吃棒棒糖 | 来源:发表于2017-06-26 16:31 被阅读19次

前言

接下来可能还有一些文章,应该都是根据面试总结的答案,文章很好,值得学习。
基本都是oc部分的,只能怪自己太懒散,靠这种笔记来督促自己学习吧。

做iOS,是因为公司因为项目需要想让我转,说实话一开始一窍不通。最早看到同事写的#define,只能明白是宏定义,后来发现宏定义也很有学问。每次看到介绍OC都会有提到c和c++,由此又会有许多相关的知识,不要抱怨知识太多学不完,看以前能留下来的c或c++的代码会发现以前的码农们的智慧,敬畏前辈吧。

第一部分

const

const的应用在c++中应该是经常用到,代表不可变,看到Eric_Jo09年写的const,现在依然受益匪浅。

首先,要明白,const是一个修饰符。当const出现的时候,原有的声明代码不会减少什么,就比如帅气的作者遛着狗,const就代表帅气,不能因为帅气的修饰作者会失去原有的基本设定,当然也可以这样说帅气的作者遛着帅气的狗,本意还是作者遛着狗,只不过少了修饰。明白了这点下面的就好理解了

    char* const Acontent;
    const char *Bcontent;
    const char* const Ccontent;

简单的三个写法:
1、修饰指针本身,表示指针本身是常量不可变
2、修饰指针的指向,表示指针指向常量
3、以上两者结合,表示常量指针指向常量
可以以*****为分割,const在**左边代表修饰指针指向的为常量,const在右边代表指针本身为常量。

static

static用在全局变量时代表变量仅在本文件中有效,外部无法使用。如果想在外部使用可以使用extern。

define

常见变量定义写法
#######define MONTH 12
#######define 常量名 代替值
这是预处理代码,在代码编译前在整个代码中进行一次替换

第二部分

说实话const static和define每一个都可以讲很多,我这水平也不可能讲这么多,下面总结自《编写高质量iOS与OS X代码的52个有效方法》中的第一章第4条。
这段的基调呢就是多用类型常量,少用define。
大体有以下几个原因
1、 define 采用的变量名无类型信息,static const带着类型信息,由此语义更明了。
2、 如果在a文件中使用的static,在a被引用的文件中,define定义的变量名都会被替换,static不会。
3、采用类型变量可以在想暴露的时候暴露比如:
.h

extern NSString *const testString;

.m

NSString *const testString = @"kukukuku";

可以将testString暴露,在引用时可以使用。(此处const代表,禁止修改testString指针的指向)
同时不能省略static,如果如果省略,如下写法,如果在两个不同的文件中写了同样的常量名会报错如下:

NSString *const testString = @"kukukuku";
duplicate symbol _testString in:
    /Users/larkdata/Library/Developer/Xcode/DerivedData/textview-hcrilhoybkwnwghilgqurdgcdvlh/Build/Intermediates/textview.build/Debug-iphonesimulator/textview.build/Objects-normal/x86_64/Test1ViewController.o
    /Users/larkdata/Library/Developer/Xcode/DerivedData/textview-hcrilhoybkwnwghilgqurdgcdvlh/Build/Intermediates/textview.build/Debug-iphonesimulator/textview.build/Objects-normal/x86_64/ViewController.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

第三部分

看到上文提到的民间大牛Eric_Jo的文章中总结的一个图表实在好,就整理过来吧。应该说static,const,define都是在C++中用到的,道理相通。

DE383230-9ED5-473A-9652-C8A92D95A284.png

没办法这个简书表格不会弄只能手打然后截图了

参考文章
[http://www.jianshu.com/p/403ee06a584e]
[http://blog.csdn.net/Eric_Jo/article/details/4138548]
《编写高质量iOS与OS X代码的52个有效方法》

相关文章

  • iOS中 static、const、extern、define

    1、 static、const、extern、define(1)define—const—-苹果推荐使用const...

  • #define const static

    iOS 宏(define)与常量(const)的正确使用

  • const、static、define

    前言 接下来可能还有一些文章,应该都是根据面试总结的答案,文章很好,值得学习。基本都是oc部分的,只能怪自己太懒散...

  • define const static

    预编译 预编译 是做些代码文本替换的工作。处理#开头的指令,比如#define宏定义,#include 包含的文件...

  • iOS 定义常量

    常量定义的方式: #define extern const static const FOUNDATION_EXP...

  • iOS -> 正确使用static、extern、cons

    1、const与宏 #define 的区别: 2、static与const结合使用 3、extern与const ...

  • static const extern define

    了解static 与 const的使用 看我上一篇文章.iOS写法优化,苹果推荐是使用const.下面我把整理的区...

  • const / define / static / extern

    一、全局变量 / 宏 / 常量 比较 全局变量: int age = 20; 缺点:能修改,优点:内存中只保存一份...

  • define const extern static

    define :预编译处理 不做检查 消耗内存 可以定义函数 const :字符串常量,不能定义函数,效率高 是一...

  • define const extern static

    define :预编译处理 不做检查 消耗内存 可以定义函数 const :字符串常量,不能定义函数,效率高 是一...

网友评论

      本文标题:const、static、define

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