c++全局变量extern

这篇具有很好参考价值的文章主要介绍了c++全局变量extern。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

extern

extern 是 C++ 中的一个关键字,用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器在链接时在其他文件中寻找该变量或函数的定义。

在 C++ 中,如果一个变量或函数在多个文件中使用,那么就需要在每个文件中都声明一次该变量或函数。这时就可以使用 extern 关键字来声明该变量或函数是在其他文件中定义的。

除了在不同文件中共享变量和函数的定义、在函数中使用全局变量、在头文件中声明变量和函数、在类中声明静态成员变量外,extern 还有一些其他的用法:

  1. 在模板中使用外部变量
  2. 在命名空间中使用外部变量
  3. 在静态库中使用外部变量

声明变量

例如,假设我们有两个文件 a.cppb.cpp,它们都需要使用同一个全局变量 g_var,那么可以在 a.cpp 中定义该变量,并在 b.cpp 中使用 extern 来声明该变量:

// a.cpp
int g_var = 0;

// b.cpp
extern int g_var;

int main() {
    // 使用全局变量 g_var
    g_var = 1;
    return 0;
}

在上面的代码中,我们在 a.cpp 中定义了全局变量 g_var,并在 b.cpp 中使用 extern 来声明该变量。这样在链接时,编译器就会在其他文件中寻找该变量的定义。

声明函数

除了变量,extern 关键字也可以用于声明函数。例如,假设我们有两个文件 a.cppb.cpp,它们都需要使用同一个函数 foo(),那么可以在 a.cpp 中定义该函数,并在 b.cpp 中使用 extern 来声明该函数:

// a.cpp
void foo() {
    // 函数实现
}

// b.cpp
extern void foo();

int main() {
    // 调用函数 foo()
    foo();
    return 0;
}

在上面的代码中,我们在 a.cpp 中定义了函数 foo(),并在 b.cpp 中使用 extern 来声明该函数。这样在链接时,编译器就会在其他文件中寻找该函数的定义。

在类中声明静态成员变量

在 C++ 中,如果一个类有静态成员变量,那么需要在类的定义外部进行定义。如果该静态成员变量是在其他文件中定义的,那么可以使用 extern 来声明它。例如:

// a.cpp
class MyClass {
public:
    static int s_var;
};

int MyClass::s_var = 0;

// b.cpp
class MyClass;

extern int MyClass::s_var;

void foo() {
    // 使用静态成员变量 s_var
    MyClass::s_var++;
}

在上面的代码中,我们在 a.cpp 中定义了类 MyClass,并在类的定义外部定义了静态成员变量 s_var。在 b.cpp 中,我们使用 extern 来声明静态成员变量 s_var 是在其他文件中定义的。在函数 foo() 中,我们可以直接使用静态成员变量 s_var

在静态库中使用外部变量

在 C++ 中,如果在静态库中使用一个外部变量,那么可以使用 extern 来声明该变量是在其他文件中定义的。例如:

// a.cpp
int g_var = 0;

// b.cpp
void foo() {
    // 使用外部变量 g_var
    extern int g_var;
    g_var++;
}

// libmylib.a
ar rcs libmylib.a a.o b.o

在上面的代码中,我们在 a.cpp 中定义了全局变量 g_var,在 b.cpp 中使用 extern 来声明该变量是在其他文件中定义的。然后将 a.ob.o 打包成静态库 libmylib.a。在其他程序中使用该静态库时,就可以直接使用外部变量 g_var文章来源地址https://www.toymoban.com/news/detail-710124.html

到了这里,关于c++全局变量extern的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • static,const,volatile,extern,register关键字深入解析

    ✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:@rivencode的个人主页 🔥系列专栏:玩转C语言 💬保持学习、保持热爱、认真分享、一起进步!! 我们都知道一个源文件要生成我们计算机课执行的文件要经过: 源文件(test.c)—预编

    2023年04月08日
    浏览(35)
  • 深入理解C++中的静态(Static)关键字及其应用场景

    在C++中,静态(Static)是一个常见且重要的概念,用于描述变量、函数和类成员。它具有独特的特性和作用域,可以在不同的应用场景中发挥重要作用。本文将详细讨论C++中的静态,包括静态变量、静态函数和静态类成员,并对其与全局变量之间的区别进行分析

    2024年02月09日
    浏览(49)
  • C语言中volatile/register/const/static/extern/auto关键字的作用

    目录 一、volatile 二、register详解 三、const详解 四、static详解 五、extern详解 语法 作用 六、auto详解 突然想总结一下这些的作用,灵活使用这些对程序的可靠性和速率都有提高 volatile是防止编译器优化,如果是高频繁的变量编译器会自动将变量放到寄存器中,但是有的变

    2024年02月07日
    浏览(67)
  • C理解(五):编译,链接库,宏,关键字,变量

    编译          编译过程                 文件.c-(预处理)-文件.i-(编译)-文件.S-(汇编)-文件.o-(链接)-elf程序          预处理                 内容:加载头文件(#include),清除注释(//,./*),替换条件编译(#if #elif #endif    #ifdef),替换宏定义(#define)           

    2024年02月07日
    浏览(44)
  • Python 作用域:局部作用域、全局作用域和使用 global 关键字

    变量只在创建它的区域内可用。这被称为作用域。 在函数内部创建的变量属于该函数的局部作用域,并且只能在该函数内部使用。 示例:在函数内部创建的变量在该函数内部可用: 如上面的示例所解释的那样,变量 x 在函数外部不可用,但可以在函数内部的任何函数中使用

    2024年02月08日
    浏览(52)
  • c++全局变量extern

    extern 是 C++ 中的一个,用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器在链接时在其他文件中寻找该变量或函数的定义。 在 C++ 中,如果一个变量或函数在多个文件中使用,那么就需要在每个文件中都声明一次该变量或函数。这时就可以使用

    2024年02月08日
    浏览(47)
  • 【C语言趣味教程】(7) 存储类:auto 关键字 | register 关键字 | 存储期 | 自动存储期 | 动态存储期 | 线程存储期 | 动态分配存储期 | 静态变量

        🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:什么是存储类别? ❓ 你没有听说过 \\\"存储类别\\\" 的概念? 📚 存储类别  (Storage Class) 在 C 语言标准中用来 规定变量与函数的可访问性与生命周期。 \\\"可访问性\\\" 的概念就是我们上一章说的作用域范围,我们先关注以下

    2024年02月10日
    浏览(54)
  • c++关键字const

    C++中的const是一种常量修饰符。在变量、函数参数和成员函数中使用const可以限制其对数据的修改。 const修饰的数据在定义时必须进行初始化,且不能被修改,因此使用const可以提高代码的安全性和可读性。 在 C ++ 中, const修饰的成员函数表示该函数保证不会修改类的成员变量

    2024年01月19日
    浏览(55)
  • C++ : auto关键字

            前提引入:                 1.类型名,在绝大多数编程时,我们都会引入类型来定义一个我们需要的数据。                 类型众多,偶尔我们会遇见一串类型名,使用起来无比复杂。存在拼写错误,含义不明确导致出错的问题。                 列如:      

    2023年04月11日
    浏览(97)
  • Rust中的关键字

    严格 as - 强制类型转换,消除特定包含项的 trait 的歧义,或者对 use 和 extern crate 语句中的项重命名 async - 返回一个 Future 而不是阻塞当前线程( 2018版新增) await - 暂停执行直到 Future 的结果就绪( 2018版新增) break - 立刻退出循环 const - 定义常量或不变裸指针(constant raw

    2024年02月07日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包