这次在集成百度导航的时候 发现与工程中的一个三方冲突了。然后发现是变量名冲突了。
https://segmentfault.com/a/1190000009610305
想想在平日的代码中,或项目中其他人的代码中,我们经常有滥用常量的经历,一般稍微注意点可能就会抽出来写个宏,或者定义一些const
常量。但是相比之下我是更倾向用const
来定义。
其实许多博文已经分析的很清楚了, const常量与define宏定义的区别
就我个人经验来说,
const
定义常量,会包含类型信息,更清楚的描述常量的含义.
一般我们会用static
与extern
来修饰const
static
修饰符意味着该变量仅在此变量的编译单元,编译器每收到一个编译单元 ,就会输出一份目标文件,在OC的语境下,编译单元一般指每个类的实现文件。
一般用于修饰作用域仅限于某类的变量。
extern
修饰符实际上是告诉编译器在全局符号表中将会有一个该名字的符号,也就是说编译器无需查看其定义,即允许代码使用此常量.因为它知道当链接成二进制文件后,肯定能找到该常量。因为是全局使用,所以命名要格外注意。像上面的bug就是出现了冲突,也是作用域声明不清,或者说由于OC没有命名空间,所以一定要加上适当的前缀。
一般用于需要对外公开的某个常量,例如注册的通知。
关于宏是预处理阶段替换 下面有个文章举了个例子.最后avatar是啥?
#define avatar @"60"
if (false) {
#define avatar @"80"
}
宏定义和常量定义的区别
宏定义与常量的基本用法
iOS 宏(define)与常量(const)的正确使用
iOS 不要用宏来定义你的常量