当前位置: 首页 > news >正文

extern关键字的用法

目录

总述

一、声明外部变量

二、声明外部函数

 三、实现模块化编程

四、与"C" 连用,实现C和C++的混合编程

 五、注意事项

六、疑点补充(你可能会有和我一样的疑问?)


总述

       在C和C++中,extern关键字用于声明外部全局变量变量或函数,表明它们的定义位于其他文件中,从而允许在不同源文件之间共享变量和函数。以下是extern的常见用法:

一、声明外部变量

一)用法

       在一个源文件中定义全局变量后,在其他源文件中使用extern声明该变量,以便访问它。

二)示例

        file1.c:定义全局变量

int globalVar = 10;

        file2.c:声明并使用该变量

extern int globalVar;

void func(){
    printf("globalVar = %d\n",globalVar);
}

二、声明外部函数

一)用法

        在一个源文件中定义函数后,在其他源文件中使用extern声明该函数,以便调用它。

二)示例

        file1.c:定义函数

void func(){
    //函数实现
}

        file2.c:声明并调用该函数

extern void func();

int main(){
    func();
    return 0;
}

 三、实现模块化编程

一)用法

        将extern声明放在头文件中,以便多个源文件包含头文件后共享变量和函数。

二)示例

        header.h

#ifndef HEADER_H
#define HEADER_H

extern int globalVar;
extern void func();

#endif

        file1.c

#include "header.h"

int globalVar = 10;
void func(){
    //函数实现
}

        file2.c

#include "header.h"

void anotherFunc(){
    printf("globalVar = %d\n",globalVal);
    func();
}

四、与"C" 连用,实现C和C++的混合编程

一)用法

        在C++中,使用extern "C"指定按照C语言规则进行函数名修饰和链接,以便调用C语言编写的库函数或在C语言中调用C++编写的函数。

二)示例

        C++代码调用C函数

extern "C"{
    #include "c_library.h"
}

int main(){
    c_function();
    return 0;
}

        C代码调用C++函数

//C++ code
extern "C" void cpp_function(){
    //函数实现
}

 五、注意事项

一)声明与定义的区别

        extern用于声明变量或函数,定义时需要分配内存空间。变量只能定义一次,但可以多次声明。

二)头文件保护

        在头文件中使用extern声明变量或函数时,应配合条件编译指令(如#ifndef、#define、#endif)防止头文件被重复包含。

        通过合理使用extern关键字,可以提高代码的组织性和可维护性,实现模块化编程,并支持C和C++混合编程。

六、疑点补充(你可能会有和我一样的疑问?

问:extern 引用的变量可以赋值吗?

答:在 C 和 C++ 中,使用 extern 关键字声明的变量本质上是一个指向已经在其他地方定义的变量的引用。它的主要作用是告诉编译器这个变量在其他文件中定义,可以在当前文件中使用。关于赋值的问题,下面是一些要点:

一)赋值效果:虽然在声明时使用 extern 不允许你直接给这个变量赋初始值,但你可以在任何地方(通常是在其定义所在的文件中)对其进行赋值。例如:

//file1.c
int myVar; // 定义
myVar = 10; // 可以赋值

//file2.c
extern int myVar; //引用变量,不能初始化
myVar = 20; //可以赋值,虽然在其他文件中被引用

void modifyValue(){
    myVar = 30; // 可以赋值
}

int main(){
    modifyValue();
    printf("myVar = %d\n",myVar);
    return 0;
}

 二)初始化与赋值如果在同一作用域内声明变量,extern声明的变量不能被初始化。例如:

extern int myVar = 10; //错误:无法初始化extern声明的变量

三)在函数内:在函数内部,你可以访问extern声明的变量并对其赋值,但前提是该变量在其他地方有定义。

        总之,extern引用的变量是可以被赋值的在声明时不能直接初始化它

相关文章:

  • 机器人的手眼标定——机器人抓取系统基础系列(五)
  • Unity Animation的其中一种运用方式
  • 【吾爱出品】【阿修】兔子vCard editor by(通讯录编辑工具)
  • 【RH124】 第五章 创建、查看文本文件
  • Android Launcher3 HotSeat文件夹创建禁止方案全解析
  • WordPress二次开发中常用到的一些变量和函数
  • 算法刷题整理合集(六)
  • 如何提升需求管理能力
  • 编辑距离算法的正确性证明
  • 计算机网络-2 物理层
  • 01_JavaScript
  • WMS WCS系统架构
  • 二叉树_二叉搜索树中的众数
  • 重生之我是八位数码管糕手
  • 使用__attribute__((at(addr))) 固定变量到指定 Flash 地址
  • 架构思维:从CAP到PACELC到BASE
  • :ref 和 this.$refs 的区别及 $ 的作用
  • 机器学习在自然语言处理中的应用与实践
  • c++高精度减法
  • @maptalks/gl-layers中的VectorTileLayer的Symbol样式文档
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 论法的精神︱张玉敏:知识产权保护要为社会经济文化发展服务
  • 在循环往复的拍摄中,重新发现世界
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼
  • 中国贸促会:有近50%的外贸企业表示将减少对美业务
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别