const,static,extern详解

一、const详解

*如果试图修改由const修饰符修饰所声明的变量,编译器会报错。*

const修饰符修饰的指针:

  1. const int *p 和 int const *p
    指针p的指向可以改变,但p指向的内容不可以改变。
      const int  *a;
        int b;
        a = &b;
        *a = 100;//(编译报错)
  1. int *const p;
    指针p的指向不可以改变,但p指向的内容可以改变。
        int *const a;
        int b;
        a = &b;//(编译报错)
        *a = 100;
  1. const int *const p;
    指针p的指向不可以改变,p指向的内容也不可以改变。
        int b = 100;
        const int *const a;
        a = &b; //(编译报错)
        *a = 100;//(编译报错)

结论:const修饰的不能改变。

二、static

static修饰符修饰的变量意味着该变量仅在定义此变量的编译单元(oc中的.m文件)内可见。假如声明变量时不加static,编译器会为它创建一个“外部符号”(external symbol),如果两个编译单元内拥有同名的变量,编译器会抛出一条错误信息。实际上,如果一个变量同时声明为static const,编译器根本不会创建符号,此时会跟#define预处理命令一样。

在实现文件使用static const 来定义只在编译单元内可见的常量。(未在全局符号表中)

三、extern

如果要公开某个常量、声明一个外界可见的常值变量。此类常量需要防止“全局符号表”(global symbol table)。
定义方式: 常量在头文件中声明,在实现文件里定义。

//header file
extern NSString *const externValue;
//implementation file
NSString *const externValue = @"VALUE";

在头文件中使用extern 声明全局常量,并且在相关实现文件中定义其值。(全局符号表中)

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/null_nil/article/details/49907073
文章标签: static const
个人分类: iOS
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭