deine const 等关键字区别

define
  属于预编译指令,在程序运行之前就已经编译好;额,定义变量,没有类型信息,

const
  修饰的变量是不可变的,只是给出了内存地址,且只在程序运行时初始化开辟一块内存空间
  const 只修饰右边部分 右边部分表示只读

    int const *p; // *p:指针变量
    //可以修改值,但不能修改地址
    int a = 10;
    int b = 20;
    int const *p = &a;
    NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
    p = &b; 
    NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);


    // const修饰变量
    int * const p; // p:常量
    //只能修改p的地址 不能修改p 的值
    int const *p = &a;
    NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);
    *p = b; 
    NSLog(@"a = %d,b = %d,*p = %d a地址:%p", a, b, *p,a);



extern
  extern用来修饰全局变量。extern用在变量声明中常常有这样一个作用
  使用如:
  .h 文件中声明
    extern NSString * const kTTTStrikeOutAttributeName;
  .m 文件中
    NSString * const kTTTStrikeOutAttributeName = @"TTTStrikeOutAttribute";

FOUNDATION_EXPORT:
  FOUNDATION_EXPORT double TTTAttributedLabelVersionNumber;

  类似define,区别在于这种方法在检测字符串的值是否相等的时候更快.对于第一种你可以直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])

参考链接:http://www.jianshu.com/p/f547eb0368c4

原文地址:https://www.cnblogs.com/air-liyan/p/6489833.html