• static,const,extern,以及全局常量


    1:全局常量的定义:1:创建Header头文件,再创建与Header头文件类名相同的空文件作为.m文件,.h文件引用文件,.m文件负责定义常量

    1 #import <UIKit/UIKit.h>
    2 
    3 UIKIT_EXTERN const CGFloat XMGRed;
    4 UIKIT_EXTERN const CGFloat XMGGreen;
    5 UIKIT_EXTERN const CGFloat XMGBlue;
    6 UIKIT_EXTERN const CGFloat XMGAlpha;
    7 UIKIT_EXTERN const int XMGAge;
    8 UIKIT_EXTERN NSString * const XMGName;
    #import <UIKit/UIKit.h>
    
    const CGFloat XMGRed = 0.4;
    const CGFloat XMGGreen = 0.6;
    const CGFloat XMGBlue = 0.7;
    const CGFloat XMGAlpha = 1.0;
    const int XMGAge = 20;
    NSString * const XMGName = @"jack";

    补充:1:若无法识别CGFloat结构体,则引入头文件,

    #import <UIKit/UIKit.h>

    2:.m文件中定义的常量,用const修饰代表常量。其中const CGFloat a = 10.f; 和 CGFloat const a = 10.f;两种写法是一样的,都代表a值为常量,不可修改,但是外部可通过extern CGFloat a;引用该变量,若无const,则通过extern引用a后也可修改。全局变量若只想被该文件所持有,不希望被外界引用,则用static修饰,也就是static  const  CGFloat a = 10.f;和 static  CGFloat  const a = 10.f;是一样的,注意只有全局变量用static修饰时,才只被该文件所持有,外界不可引用。

    const CGFloat XMGRed = 0.4;定义一个常量,若是全局变量,则可被外界引用,但不能修改

    3:定义不可变字符串时:用 static NSString * const name = @"JACK";则指针name不可变,外界不可以给该变量赋值。其中const修饰可变与不可变,就看const右边修饰的是什么 例如:NSString * const name = @"JACK",则代表指针name不可变,*name可变,若NSString  const  * name = @"JACK",则 *name不可变,指针name可变

    4:UIKIT_EXTERN:其实就是extern,最好加上const,来告诉外界这个引用变量不可改变。

    UIKIT_EXTERN const CGFloat XMGRed;

    5:宏定义 与 static const 修饰的全局常量的区别:一般项目中尽量避免使用大量的宏定义,因为每一个宏定义都会在内存中临时开辟一份内存空间,而static const 修饰的常量 ,则只会开启一份内存空间,其使用效果和宏定义相同,建议以后项目开发中定义常量时,多用 static const 来代替宏定义

    
    
  • 相关阅读:
    【SQL基础】三种类别语句
    【安装eclipse, 配置java环境教程】 编写第一个java程序
    【c++错误】类的语法错误 error c2533:constructors not allowed a return type(构造函数不允许返回一个类型)
    【经典算法大全】收集51种经典算法 初学者必备
    【费式搜寻法】
    【插补搜寻法】
    【基数排序(桶排序)】
    【字串核对】
    【老鼠走迷宫二】
    【稀疏矩阵】
  • 原文地址:https://www.cnblogs.com/cqb-learner/p/5716565.html
Copyright © 2020-2023  润新知