美文网首页
#define预处理指令和带类型的常量

#define预处理指令和带类型的常量

作者: clarkIsMe | 来源:发表于2019-04-23 15:54 被阅读0次
    • 不用用预处理指令定义常量。这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找和替换操作。即使用人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中的常量值不一致。
    • 在实现文件中使用 static const 来定义“只在编译单元内可见的变量”。由于此类变量不在全局符号表中,所以无须为其名称加前缀,但一般以小写 k 开头。
    • 在头文件中使用extern来声明全局常量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加以区分,通常用与之相关的类名做前缀。

    预处理指令定义常量:不带类型,并且有可能被其他人修改

    #define EXAMPLE 1
    

    如果一个变量既声明为static,又声明为const,那么编译器根本不会创建符号,而是会像#define预处理指令一样,把所有遇到的变量都替换成为常值

    定义静态局部常量:带有类型,不可被重新定义或被修改,用小写k作为前缀

    static const NSInteger kExample = 1;
    

    定义静态全局常量:带有类型,不可被重新定义或被修改,用相关类名作为前缀

    static const NSInteger TestClassNameExample = 1;
    

    定义通知名称需要对外部公开某个常量

    //头文件
    #import <UIKit/UIKit.h>
    
    extern NSString *const TestNotification;
    
    @interface testViewController : UIViewController
    
    @end
    
    //实现文件
    #import "testViewController.h"
    
    NSString *const TestNotification = @"TestNotification";
    
    @interface testViewController ()
    
    @end
    
    @implementation testViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:#define预处理指令和带类型的常量

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