• c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功


    关键字extern的作用

    这个很常见的都知道是定义一个外部变量或函数,但并不是简单的建立两个文件,然后在用extern 定义在另一个非最初定义变量的文件里

    区分文件和编译运行的文件

    例如,一个文件夹里有文件a.c和文件b.c,在sublime text中直接运行的只是单独一个文件,而大工程一般有很多文件,一个文件的正常运行是和其他文件相关联的。对于单独运行的文件即使在同一个文件夹中的文件使用了extern定义,编译时也不会去查找另外的文件。

    文本编译和软件编程IDE的区别

    文本编译器也可以写代码,但使用编译器时只是针对当前编写的代码文件有关;编程IIDE(集成开发环境)中常见的有一个选项是“新建工程”,这个工程里可以包含多个文件,整体编译时每个文件之间的联系也会考虑到。这是和新建文件不同文本编辑器中的只有新建文件

    尝试用两个c文件测试extern

    首先,最初定义的变量文件命名为b.c ,使用extern声明的文件命名为a.c

    第1种实现方式,不使用头文件

    需要注意的是,初次定义的变量必须是全局变量

    a.c中的内容

    #include
    
    #include 
    int main()
    {
        printf("asdgawerg\n");
            extern int num; //只要放在使用的语句前就行
        printf("this is num:%d\n",num);
        system("pause");  //为了运行后不立刻关闭窗口
        return 0;
    }
    

    b.c中的内容

    #include
    int num = 5;  //必须是全局变量
    // void func();
    // void main()
    // {
    // func();
    
    // }
    void func()
    {
    
        printf("fun in b.c\n");
    }
    

    第2种使用包含头文件的方式

    多添加一个头文件b.h,如下面内容

    void func();
    int num;
    

    a.c文件中不需要extern 声明变量和函数就可以,只需要包含头文件b.h
    在这里插入图片描述
    需要注意的是在使用c编译器时,这种情况可以正常编译执行。但在keil中,变量(函数不同)在b.c定义后,若在h文件中声明了,必须加extern声明变量,但函数就不需要。

    编译多个文件的方式

    从根本上来说,就是直接通过编译器命令将多个文件同时编译
    编译多个文件参考,参考2
    下面在不同环境下运行程序,

    在powershell环境下运行

    在文件夹下,按下shift和鼠标右键,如下图所示
    在这里插入图片描述
    像下图中输入命令,进行和编译和执行
    在这里插入图片描述

    在cmd环境下运行

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    leetcode 136. 只出现一次的数字
    使用打表法找规律
    【HackTheBox】Fawn
    Bean 作用域和生命周期
    JAVA 学习路线 学习大纲(java 进阶路线)
    使用 ELK 收集日志
    Substrate 技术及生态 8 月大事记 | 波卡发布新版本,XCM 协议更新
    《语义增强可编程知识图谱SPG》白皮书
    HTML期末学生大作业-班级校园我的校园网页设计与实现html+css+javascript
    微积分 - 导数
  • 原文地址:https://blog.csdn.net/weixin_43794311/article/details/140033176