美文网首页
iOS const、static、extern

iOS const、static、extern

作者: Tony_HYH | 来源:发表于2019-03-20 10:05 被阅读0次

    一、const与宏定义的区别

    1. 宏定义是在预编译时处理,const是在编译阶段处理;
    2. 宏定义不做检查,不会报编译错误,只是替换,const会进行编译检查;
    3. 宏可以定义一些函数、方法,const不可以;
    4. 宏定义每次编译都要重新替换,所以大量的宏会导致编译时间变长;

    二、const

    1. const只修饰右边的变量,基本数据变量p,指针变量*p;
    2. 被const修饰的变量是只读的,不可更改值;
        //两种写法是一样的,都是只修饰右边变量m
        const int m = 20;
        int const m = 10;
        
        m = 30;//会报错,const修饰后不允许修改值
        
        int a = 10;
        int const *p = &a;
        const int *p = &a;
    

    三、static

    修饰局部变量:

    1. 延长局部变量的生命周期,程序结束才会被销毁;
    2. 局部变量只会生成一份内存,只会初始化一次;
    3. 改变局部变量的作用域;

    修饰全局变量:

    1. 只在本文件内访问全局变量,修改全局变量的作用域,不改变生命周期;
    2. 避免重定义全局变量;

    四、static和const联用

    用来声明一个静态只读常量,一般就是静态全局只读常量;

        //声明一个静态全局只读常量,name的值不可变,宏的替代品
        static NSString *const name = @"小明";
        
        //声明的是*word只读
        static NSString const *word = @"hello";
        //所以可以修改word的值
        word = @"world";
    

    五、extern与const联用

    extern只能用来获取全局变量的值,不能修饰变量;
    extern工作时,现在本文件内查找变量的值,如果没有找到,会去其他文件查找;
    如果有多个文件都需要使用的变量,可以使用extern和const联用;

    .h文件中
    //定义了可在多个文件中共同使用的全局静态常量
    extern NSString *const country;
    extern NSString *const home;
    
    .m文件中
    NSString *const country = @"China";
    NSString *const home = @"HeNan";
    

    相关文章

      网友评论

          本文标题:iOS const、static、extern

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