• 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
  • 相关阅读:
    仿照java的jdk动态代理实现go语言动态代理
    Vue2 零基础入门 Vue2 零基础入门第三天 3.2 计算属性 && 3.3 vue-cli
    YOLO V5、SAM、RESNET50模型在GPU环境下搭建过程
    Kafka的分区和副本机制
    微信小程序 实现CBC 加密/解密
    黑猫带你学Makefile第13篇:Makefile编译问题合集
    VS2022ide下使用C++实现简谐振动,C语言程序设计简谐运动的模拟,C语言课程设计简谐振动实验的模拟。
    VLAN(Virtual LAN)虚拟局域网
    C语言中的异常处理机制是什么?
    API 管理调研
  • 原文地址:https://blog.csdn.net/u010164190/article/details/134286842