C语言必知-作用域与链接属性

常量

常量样子同变量的样子相同,但是不能够修改他的值

const int a = 15;
int const a = 15;		=>a是指向整形常量,值是15

int * pi;				=>指向整形的指针
int const *pi;			=>指针的指向可以改变,指向的值不能改变
int * const pi;			=>指针的指向不可改变
int const *const cpci;	=>都不可以改变    
    
声明const是很有必要的,如果你意外的修改了本来是不应该被修改的值,编译器会报错提示 
    
作用域

作用域类型:

  1. 文件作用域
  2. 函数作用域
  3. 代码块作用域

代码块作用域:

位于一对花括号之间的语句成为一个代码块,在代码块的开始位置声明的标识符都具有 代码块作用域

他们可以被代码块中的所有语句访问

文件作用域

在所有的代码块之外声明的都是具有 文件作用域,从标识符号的声明到源文件的结尾都是可以访问的

也就是声明的全局变量

int a, b = 5;
int c(int x){}
int fun(int e)
{
    .....
}

//上面的a,b,c都属于这一类,因为它们没有被代码块包起来

原型作用域

就是函数参数
int fun(int a)		//参数a可以命名为任意的名字,仅仅作用域这个函数的开始到结尾
{
    ...
}

链接属性

链接属性一共有三种:external(外部) internal(内部) none(无)

  • none:总是被当做是单独的个体,该标识符的多个声明都是不同的实体
  • internal属性的标识符在同一个源文件内所有声明都是一个实体,但是在不同的源文件的多个声明属于不同的实体
  • 属于external链接属性的标识符无论声明多少次、位于几个源文件都是同一个实体

关键字:extern 和static

  • 如果某个声明具有external链接属性,在前面加上static可以使链接属性变为internal

    static int b表示b为该源文件私有(假设b之前缺省为external),在其他的源文件中如果也链接到一个叫做b的变量那么所引用的就是另一个不同的变量

    同样对函数名也有效static int c(int d)

    设置为static之后可以防止被其他的源文件调用

  • 使用external声明表示符号可将链接属性更改为external,例如下面的k,但是如果用于标识符的第二次或者以后的声明,不会更改第一次指定的类型如i

static int i 
int func()
{
    int j;
    extern int k;		=>更改为external链接属性
    extern int i;		=>第二次更改,不会改变属性
}

总结

  • 具有external 链接属性的实体成为全局(global)实体,所有的源文件中所有的函数均可以访问。只要变量 不是声明与代码块内部或者函数定义内部,缺省情况下就是external
  • 如果一个变量声明于代码块的内部,在前面加上extern关键字代表它所引用的是 全局变量而不是局部变量

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值