美文网首页
多用类型常量,少用#define预处理指令

多用类型常量,少用#define预处理指令

作者: ladispartion | 来源:发表于2017-04-19 10:29 被阅读6次

    1.编写代码是经常要定义常量,比如播放动画的时间,也许你会这样做:

    #define ANIMATION_DURATION 0.3

    这样做虽然可以达到效果,但是定义之后却没有常量的类型信息。假如在某个头文件中引入了这个头文件的代码,则所有的ANIMATION_DURATION都会被替代。

    要想更好的解决此问题,应该设法利用编译器的某些特性才对。比如下面这行代码:

    static const NSTimerInterval kAnimationDuration = 0.3;

    此方式定义的常量包含类型信息,其清楚地描述了常量的含义为NSTimerInterval。有助于其编写开发文档。此类定义方式的命名规则一般是:若某常量局限于某“编译单元,也就是实现文件’之内,则在前面加k;若常量在类之外可见,则通常以类名为前缀。定义格式一般为:static constant 类型 名字 = 内容;

    变量一定要同时用static 和 const 来声明。这样编译器不会创建符号而是会像#define预处理指令一样,把所有遇到的变量都替换为常值,且包含有类型信息。

    2.有时候需要对外公开某个变量,比如通知。

    此类常量需要放在”全局符号表’中,以便可以在定义该常量的编译单元之外使用。方式为:

    //In the header file

    extern NSString *const LoginStringConst;(类名前缀)

    //In the implementation file

    NSString *const  LoginStringConst = @“VALUE”;

    这个常量在.h文件中声明。在实现文件中”定义”。注意const修饰符在常量类型中的位置。常量定义应从右向左解读。在上例中LoginStringConst 就是“一个常量”,而这个常量是指针,指向NSString 对象。此类常量必须要定义且只能定义一次。通常将其定义在声明该常量的头文件相关的实现文件中。由实现文件生成目标文件时与其他目标文件相链接,以生成最终的二进制文件。凡是用到该LoginStringConst这个全局符号的地方,链接器都能将其解析。

    相关文章

      网友评论

          本文标题:多用类型常量,少用#define预处理指令

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