2020.1.3 C语言学习1 extern+作用域+定义和声明的区别+链接属性

1. extern关键字

用extern关键字告诉编译器: 这个变量我后面定义了,你先别急着报错!

#include <stdio.h>
void func();
void func()
{
    extern count;
    count++;
}
int count = 0;

int main()
{
    func();

    printf("%d\n", count);

    return 0;
}

这里就是在函数后声明全局变量count , 如果不加extern会报错.

2. 不要大量的使用全局变量

  • 使用全局变量会使你的程序占用更多的内存, 因为全局变量从被定义时候开始,直到程序退出后才被释放.
  • 污染命名空间,虽然局部变量会屏蔽全局变量, 但是这样一来也会降低程序的可读性,人们往往很难一下子判断出来每个变量的含义和作用范围。
  • 提高了代码的耦合性牵一发而动全身,时间久了,代码长了,不知道全局变量被哪些函数修改过。

3.作用域

  • 定义: 当变量被定义在程序的不同位置时,它的作用范围是不一样的,这个作用范围就是我们所说的作用域
  • C语言编译器可以确定4种不同类型的作用域:
    – 代码块作用域
    –文件作用域
    –原型作用域
    –函数作用域

1. 代码块作用域(block scope)
代码块: 就是被花括号 {} 括起来的部分。 函数是一个代码块, 函数中的循环签到的花括号也是代码块。

  • 在代码块中定义的变量,具有代码块作用域。作用范围是从变量定义的位置开始,到标志该代码块结束的右大括号 ‘ } ’处。
  • 尽管函数的形参不在大括号内定义,但其同样具有代码块作用域,隶属于包含函数体的代码块。
#include <stdio.h>

int main(void)
{
   
    int i = 100;
    {
   
        int i = 110;
        <
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值