c++ extern 关键字

概述

在C++中,extern关键字用于声明变量或函数是在其他文件或编译单元中定义的。这意味着使用extern声明的变量或函数不是在当前文件中创建的,而是在程序的其他部分定义的。使用extern可以避免在多个文件中重复定义相同的变量或函数,并且可以确保这些变量或函数在程序的不同部分保持一致。

以下是一些关于extern的关键点:

  1. 全局变量和函数:extern通常用于声明全局变量和函数,它们在程序的多个文件中共享。
  2. 链接:extern关键字告诉编译器,声明的变量或函数将在程序的其他地方定义。编译器将根据这些声明来链接到定义。
  3. 头文件:在头文件中使用extern可以避免在多个包含该头文件的源文件中重复定义相同的全局变量或函数。
  4. 作用域:extern声明的变量或函数的作用域是全局的,它们可以在程序的任何地方访问,只要它们被正确地声明和定义。
  5. 重定义问题:如果一个变量或函数在多个文件中使用extern声明,但只有一个文件中包含其定义,这是合法的。但如果在多个文件中都定义了相同的全局变量或函数,将会导致链接错误。
  6. 默认外部链接:在C++中,全局变量和函数默认具有外部链接,即使没有使用extern关键字,它们也可以在其他文件中访问。

变量的例子

extern int globalInt;  // 声明全局变量
extern const char* globalString;  // 声明全局常量字符串
#include <iostream>
#include "globals.h"

int main() {
    std::cout << "The value of globalInt is: " << globalInt << std::endl;
    std::cout << "The global string is: " << globalString << std::endl;

    return 0;
}

函数的例子

.h头文件

extern int add(int a, int b);
extern int multiply(int a, int b);

.cpp


#include <iostream>
#include "calculator.h"

int main() {
    int sum = add(5, 3);
    int product = multiply(4, 7);

    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Product: " << product << std::endl;

    return 0;
}

小结

这2种情况是最常见的,我们经常看到这个关键字,特别是和c语言混用的时候。要特别注意。感兴趣,可以一起学习学习。OK,本篇结束,下周,写点新的内容。

extern关键字在C语言中有多种用法。 第一种用法是在变量的声明中使用extern关键字,表示该变量在其他源文件中定义。例如,extern const char Buffer[];表示Buffer变量在其他文件中定义,并可以在当前文件中使用。 第二种用法是在函数的声明中使用extern关键字,表示该函数可能在其他源文件中定义。例如,extern int f();表示f函数可能在其他文件中定义,并可以在当前文件中使用。 第三种用法是在C++中使用extern "C"来指定函数的链接方式。这是为了解决C++函数重载带来的函数名和参数不同导致链接错误的问题。通过extern "C"修饰函数,告诉编译器保持函数名称不变,不生成用于链接的中间函数名。这通常在C++代码中与C函数交互时使用。 总而言之,extern关键字在C语言中用于声明变量和函数的链接方式,以及在C++中用于修饰函数以保持函数名称不变。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++全局变量的定义和声明](https://blog.youkuaiyun.com/webzhuce/article/details/38899635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C/C++extern关键字详解](https://blog.youkuaiyun.com/weixin_38218095/article/details/96473556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值