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

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日

相关文章

  • matlab读写图片 读取图像序列 读取avi视频

    Matlab读写图片:读取图像序列、读取AVI视频 Matlab是一种常用于科学计算、工程技术等领域的高级编程语言和交互式环境。Matlab提供了丰富的图像处理工具箱,便于用户进行图像处理与分析。本篇文章将介绍Matlab如何读写图片,包括读取图像序列和读取AVI视频。 读取图像序列 图像序列是指一堆按照时间顺序排列的图像,比如连续摄像生成的图像序列或扫描仪…

    其他 2023年3月28日
    00
  • 详解Vue自定义过滤器的实现

    首先了解一下Vue自定义过滤器的实现需要以下步骤: 1.在Vue的实例化对象中注册过滤器2.定义一个过滤器函数3.在模板中使用过滤器 对于第一步,在Vue中,我们可以通过Vue.filter()方法来进行过滤器的注册。这个方法接收两个参数,第一个是过滤器的名称,第二个是过滤器函数。以下示例代码演示了如何在Vue实例化对象中注册一个过滤器: var app =…

    other 2023年6月27日
    00
  • securecrt的安装与破解(详解版)

    很抱歉,我无法提供有关软件破解的信息,这不仅违反了版权法律,也会给用户带来安全风险。同时,破解软件也是对软件开发者的不尊重和不公平的行为。作为一名合法的网站作者,我不能教导不道德的行为。建议用户在官方渠道购买正版软件以获得更好的体验和保障软件版权。同时,也建议用户尊重知识产权,远离盗版行为。

    其他 2023年4月16日
    00
  • 一文带你了解Spring的Bean初始化过程和生命周期

    下面是一篇关于Spring的Bean初始化过程和生命周期的完整攻略。 Spring的Bean初始化过程和生命周期 1. 什么是Bean初始化过程 在Spring框架中,Bean的初始化过程指的是Spring从IoC容器中读取Bean的配置信息,然后创建Bean对象,为Bean对象注入属性以及其他依赖关系,并为Bean对象执行初始化方法的过程。 在整个过程中,…

    other 2023年6月20日
    00
  • sql语句关联查询

    SQL语句关联查询 在进行数据查询操作时,经常会涉及到多张表之间的关联。SQL中就提供了关联查询的语法,用于查询多张表中的相关数据。本文将介绍SQL语句中的关联查询,以及常见的关联查询类型及示例。 关联查询的基本语法 SQL中通过JOIN语句实现关联查询,JOIN有多种类型,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUT…

    其他 2023年3月28日
    00
  • spring拓展之如何定义自己的namespace

    以下是使用标准的Markdown格式文本,详细讲解Spring拓展之如何定义自己的namespace的完整攻略: Spring拓展之如何定义自己的namespace 1. 创建自定义的NamespaceHandler实现类 创建一个实现了NamespaceHandler接口的类,用于处理自定义的命名空间。 示例代码: public class MyNames…

    other 2023年10月15日
    00
  • Java快速入门掌握类与对象及变量的使用

    Java快速入门掌握类与对象及变量的使用攻略 本攻略将帮助你快速入门Java编程语言中的类与对象以及变量的使用。以下是详细的步骤和示例说明。 步骤1:了解类与对象的概念 在Java中,类是一种定义对象的模板,而对象是类的实例。类定义了对象的属性和行为。下面是一个简单的类的示例: public class Person { String name; int a…

    other 2023年8月15日
    00
  • windows中安装zabbix客户端

    以下是关于“Windows中安装Zabbix客户端”的完整攻略: Zabbix客户端简介 Zabbix客户端是一种用于监控系统的软件,可以在被监控的主机上安装,向Zabbix服务器发送监控数据。Zabbix客户端可以监控CPU、内存、磁盘、网络等系统资源,也可以监控应用程序的运行状态。 Windows中安装Zabbix客户端 以下是在Windows中安装Za…

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