美文网首页
#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