年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2257|回复: 1

static与extern的作用

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-3-7 21:57:02 | 显示全部楼层 |阅读模式
    源文件一:
    1. /*
    2. static 与 extern在函数中与全局变量中的作用
    3. 1、函数:
    4.     1> static用来定义与声明内部函数;
    5.     2> extern用来定义与声明外部函数,一般情况下extern省略;
    6. 2、变量:
    7.     1> static用来定义内部变量;
    8.     2> extern用来声明外部变量;
    9. 3、内部函数与内部变量只能在本文件中访问,不能被外部文件程序所调用;
    10. 4、外部函数与外部变量可以被外部文件中的程序所调用,外部变量在不同的文件中被重复定义事实上定义的都是同一个变量;
    11. */
    12. #include <stdio.h>
    13. extern int a;  // 声明一个外部变量
    14. static int b;  // 定义一个内部变量
    15. void test();  // 等于extern void test(),extern声明一个外部函数
    16. int main() {
    17.    
    18.     a = 1;  // 修改外部变量a的值,该值会早影响所有文件中的外部变量a的值;
    19.    
    20.     b = 2;  // b为内部变量,只受本文件赋值影响,外部b的值不修改其值
    21.    
    22.     test();  // 调用外部函数
    23.     printf("a = %d, b = %d\n", a, b);  // 检测此时a与b的值;
    24.    
    25.     return 0;
    26. }
    27. int a;  // 同一个全局变量被多个文件所定义时不能在多个文件中初始化,事实上系统会自动初始化为0,放在此处为了让检测前面的声明;
    复制代码
    源文件二:
    1. /*
    2. 该文件用来配合主函数所在文件进行extern与static两个参数的作用;
    3. */
    4. #include <stdio.h>
    5. int a;  // 定义一个外部变量
    6. static int b = 10;  // 定义一个内部变量,检测该b值是否会影响主函数中b的值;
    7. void test() {  // 相当于extern void test() {} 定义一个外部函数;
    8.    
    9.     printf("a = %d\n", a);  //此时a的值受外部其他文件a的影响;
    10.     a = 10;  // 修改外部变量a的值,同时该值影响所有其他文件外部变量a;
    11. }
    复制代码
    输出结果为:
    1. a = 1
    2. a = 10, b = 2
    复制代码




  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-7 21:58:26 | 显示全部楼层
    注意:编译时两个文件一起被编译
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-29 23:08 , Processed in 0.047380 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表