0
点赞
收藏
分享

微信扫一扫

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

zhoulujun 2022-01-05 阅读 31

常量

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

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(无)

关键字: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关键字代表它所引用的是 全局变量而不是局部变量

在这里插入图片描述

举报

相关推荐

0 条评论