• 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
  • 相关阅读:
    Halcon Region相关算子(一)
    Kubernetes—资源管理
    柯桥在PPT中如何制作翻书动画?
    async-await与try-catch
    JVM概述及类加载器
    LLM大语言模型训练中常见的技术:微调与嵌入
    mysql批量插入性能优化:executeBatch如何通过rewriteBatchedStatements参数逆袭
    TypeError: lineplot() takes from 0 to 1 positional arguments but 2 were given
    算法学习笔记2023.1
    【八大经典排序算法】冒泡排序
  • 原文地址:https://blog.csdn.net/u010164190/article/details/134286842