• C语言之extern关键字实例总结(八十二)


    简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

    优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

    人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

    更多原创,欢迎关注:Android系统攻城狮

    欢迎关注Android系统攻城狮

    1.前言

    本篇目的:理解extern关键字用法

    2.extern关键字介绍

    • 在C++中,extern关键字通常用于链接定义在别处声明的变量或函数。extern有两个主要的用法:在函数前使用时,它允许在文件之间调用外部函数;在变量前使用时,它允许在不同的编译单元中引用变量。

    在函数前使用:

    • 如果你有一个函数在一个文件中被声明,但在另一个文件中被定义,那么你可以使用extern "C"来告诉编译器这个函数应该按照C语言的方式进行链接。

    2.代码实例

    1.外部变量

    // 文件1:example1.cpp
    #include 
    extern int globalVar; // 在文件example2.cpp中定义
    
    int main() {
        std::cout << "The value of globalVar is: " << globalVar << std::endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    // 文件2:example2.cpp
    #include 
    int globalVar = 10; // 定义全局变量
    
    int main() {
        std::cout << "The value of globalVar is: " << globalVar << std::endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在文件example1.cpp中使用了 extern 关键字声明了一个变量 globalVar,然后在文件example2.cpp中定义并初始化了这个变量。然后在文件example1.cpp和文件example2.cpp中分别使用了这个变量。

    2.外部函数

    // 文件1:example3.cpp
    #include 
    extern void func(); // 在文件2中定义
    
    int main() {
        func(); // 调用外部函数
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    // 文件2:example4.cpp
    #include 
    void func() { // 定义函数
        std::cout << "This is an external function." << std::endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在文件example3.cpp中使用了 extern 关键字声明了一个函数 func,然后在文件example4.cpp中定义了这个函数。

    3.包含头文件

    // 头文件(example5.h): 在这个文件中声明一个变量或函数,可以在多个源文件中使用。
    #ifndef EXAMPLE5_H // 防止头文件被多次包含。
    #define EXAMPLE5_H
    extern int globalVar; // 在其他文件中定义。
    #endif // EXAMPLE5_H
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建了一个头文件,其中使用 extern 关键字声明了一个变量 globalVar,然后可以在其他源文件中包含这个头文件并使用该变量。

    4.跨文件变量的初始化和赋值

    // 文件1:example6.cpp
    extern int var; // 在其他文件中定义并初始化。
    int main() {
        var = 42; // 赋值
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    // 文件2:example7.cpp
    int var; // 定义变量
    
    • 1
    • 2

    在文件example6.cpp中使用了 extern 关键字声明了一个变量 var,然后在文件example7.cpp中定义并初始化了这个变量。

    5.在全局命名空间中使用变量

    // 文件1:example8.cpp
    extern int var; // 在全局命名空间中使用变量。
    int main() {
        var = 42;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    // 文件2:example9.cpp
    int var; // 定义变量
    
    • 1
    • 2

    在文件example8.cpp中使用了 extern 关键字声明了一个变量 var,然后在文件example9.cpp中定义了这个变量。

    6.链接外部库

    // 文件1:example10.cpp
    #include "example_library.h" // 包含库的头文件
    int main() {
        someFunction(); // 调用来自库的函数
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    // example_library.h:定义库的函数和变量
    #ifndef EXAMPLE_LIBRARY_H
    #define EXAMPLE_LIBRARY_H
    extern "C" {
        void someFunction(); // 声明库中的函数
    }
    #endif // EXAMPLE_LIBRARY_H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    前端document的方法合集
    终于有阿里p9架构师分享出困扰我多年的分布式系统开发实战文档
    202310-MetaPhlAn4安装和使用方法-Anaconda3- centos9 stream
    SQLyog连接数据库报错plugin caching_sha2_password could not be loaded
    比postman更好用的接口管理软件——Apifox
    Flutter 渲染机制——GPU线程渲染
    Flask框架【before_first_request和before_request详解、钩子函数、Flask_信号机制】(七)
    【操作系统】2.4 死锁
    JAVA并发之谈谈你对AQS的理解
    GaussDB(for Redis)双活容灾支持4大应用场景,为业务安全保驾护航
  • 原文地址:https://blog.csdn.net/u010164190/article/details/134286842