C++中的extern声明变量详解

yizhihongxing

C++中的extern声明变量详解

什么是extern声明变量

extern关键字用于声明一个变量是在其他文件中定义的,可以在当前文件中使用。其作用是告诉编译器不要在当前文件中寻找这个变量的定义,而在其他文件中寻找。

为什么要使用extern声明变量

当我们在一个项目中使用多个文件时,每个文件都有自己的作用域。如果我们想在多个文件中使用同一个变量,那么就需要在这些文件中声明同一个变量。在C++中,一个变量只能被定义一次,如果在多个文件中都定义了同一个变量,编译器会报错。所以,我们需要使用extern关键字来声明这个变量是在其他文件中定义的。

如何使用extern声明变量

在当前文件中使用其他文件中定义的变量,需要在使用前先对变量进行extern声明。示例代码如下:

// file1.cpp
int num = 10;
// file2.cpp
#include <iostream>
using namespace std;
extern int num;  // extern声明变量

void printNum(){
    cout << "num = " << num << endl;
}

在file2.cpp文件中,我们对于在file1.cpp中定义的变量num进行了extern声明,这样我们就可以在file2.cpp中使用变量num了。

使用extern和不使用extern的区别

我们可以将示例代码中printNum函数进行一下改变:

void printNum(){
    extern int num;
    cout << "num = " << num << endl;
}

这样,在使用变量num时,我们没有使用extern关键字。实际上,在使用变量时,使用extern和不使用extern是一样的,编译器会自动将未定义的变量当作extern声明的变量处理。但是,为了明确地告诉编译器变量是在其他文件中定义的,我们最好使用extern关键字。

总结

使用extern关键字,可以在一个文件中使用其他文件中定义的变量,从而避免在多个文件中定义同一个变量而导致的编译错误。在使用变量时,使用extern和不使用extern是一样的,但为了明确地告诉编译器变量是在其他文件中定义的,我们最好使用extern关键字。

示例1

// file1.cpp
int num = 10;
// file2.cpp
#include <iostream>
using namespace std;
extern int num;

int main(){
    cout << "num = " << num << endl;
    return 0;
}

示例2

// file1.cpp
extern int num;
void setNum(int value){
    num = value;
}
// file2.cpp
#include <iostream>
using namespace std;
int num;

int main(){
    setNum(10);
    cout << "num = " << num << endl;
    return 0;
}

在示例2中,我们使用extern声明了变量num,然后在另外一个文件中定义了这个变量,并且通过setNum函数设置了变量num的值,最后在主函数中输出了变量num的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的extern声明变量详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Python面向对象原理与基础语法详解

    Python面向对象原理与基础语法详解 1. 引言 面向对象编程(Object-Oriented Programming,OOP)是一种常用的程序设计思想,Python作为一门面向对象编程语言,也提供了丰富的面向对象的特性和语法。本文将详细讲解Python中的面向对象原理和基础语法,帮助读者理解和运用面向对象编程的概念和技巧。 2. 面向对象原理 面向对象编…

    other 2023年6月28日
    00
  • Spring Boot优化后启动速度快到飞起技巧示例

    请听我讲解关于Spring Boot优化启动速度的攻略。为了提高Spring Boot的启动速度,我们可以采取以下技巧: 减少启动时的I/O操作 在Spring Boot应用启动过程中,会扫描并加载大量的类、属性配置文件等资源。而这些资源的读取都会产生I/O操作,从而影响启动速度。为了减少I/O操作,我们可以通过以下方式进行优化: 使用spring-boot…

    other 2023年6月20日
    00
  • 麦芒8手机值得买吗 麦芒8手机上手体验及评测

    麦芒8手机值得买吗? 如果你正在寻找一款性价比较高的手机,那么麦芒8手机会是一个不错的选择。下面我将从性能、外观、摄像头和使用体验等方面为大家进行评测。 性能 麦芒8搭载的是联发科Helio P60处理器,配备4GB/6GB RAM,64GB/128GB存储空间,最高支持256GB的扩展储存。在日常使用过程中,手机的反应速度很快,可以快速地运行各种应用程序和…

    other 2023年6月27日
    00
  • Linux命令和命令行详解

    Linux命令和命令行详解 Linux命令是Linux操作系统的核心,了解Linux命令并掌握其使用方法是成为一名优秀的Linux开发者或系统管理员的必修课之一。本文将为大家详细讲解Linux命令的概念、使用方法和示例。 Linux命令概述 Linux命令是在Linux操作系统下运行的指令,可以用于管理和控制Linux系统资源、文件和程序等。Linux命令可…

    other 2023年6月26日
    00
  • JavaScript递归算法生成树形菜单

    生成树形菜单是前端开发中很常见的需求,而其中最常用的方法就是 JavaScript 递归算法。下面是一个完整的攻略: 1. 定义数据结构 在开始编写算法之前,我们需要确定菜单的数据结构。通常情况下,一棵树形结构的菜单包含以下属性: id:节点的唯一标识符 name:节点的名称 children:子节点,也是一个数组,里面存放着若干个和父节点的结构相同的节点 …

    other 2023年6月27日
    00
  • c#程序调用cmd执行命令(转)

    c#程序调用cmd执行命令(转) 在开发过程中,我们经常需要通过c#程序去调用操作系统的一些命令。在Windows系统中,CMD命令行界面是比较常用的一种方式。本文将介绍如何使用C#程序调用CMD执行命令。 方法一:使用Process类 Process类是C#程序中用于执行外部进程的一个类,也可以使用它来执行CMD命令。 示例代码: Process proc…

    其他 2023年3月29日
    00
  • 联通光猫HG8321R怎么破解? 华为hg8321开启路由功能的技巧

    联通光猫HG8321R的破解攻略 一、前置知识 在开始之前,需要了解以下一些基础知识: 什么是光猫光猫是指光纤调制解调器,是光纤宽带网络终端设备,主要功能是将光纤接入用户的家庭或办公室,转换为家庭或办公室内的网线信号,用于连接电脑、路由器等终端设备。 什么是路由器路由器是一种网络设备,能够将各种不同的网络连接在一起组成互联网。它可以将来自网络的数据进行分配和…

    other 2023年6月27日
    00
  • 易语言图形按钮控件的用法详解

    易语言图形按钮控件的用法详解 对于易语言程序员而言,实现图形界面操作是一个常见需求,此时图形按钮控件就成了必不可少的工具之一。本文将对易语言图形按钮控件的用法进行详解。 一、概述 图形按钮控件是一种用于图形界面中的按钮控件,它可以让用户通过单击按钮执行相应的操作。易语言中的图形按钮控件支持多种属性设置,包括按钮的位置、大小、文本、字体、背景色、前景色等。此外…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部