首页 > 编程语言 >C++(extern)

C++(extern)

时间:2023-12-08 10:12:15浏览次数:29  
标签:文件 定义 C++ extern 声明 链接

在 C++ 中,extern 是一个关键字,用于说明某个变量或函数是在其他文件中定义的,而不是在当前文件中定义。extern 的主要作用是进行外部链接性的声明。

1. 外部变量的声明:

extern 可以用于声明在其他文件中定义的全局变量,以便在当前文件中使用这些变量。

// 文件1.cpp
int globalVariable = 42;
cppCopy code// 文件2.cpp
extern int globalVariable; // 外部链接性声明

2. 外部函数的声明:

extern 也可以用于声明在其他文件中定义的函数。

// 文件1.cpp
void myFunction() {
    // 函数定义
}
cppCopy code// 文件2.cpp
extern void myFunction(); // 外部链接性声明

3. 避免重复定义:

使用 extern 可以避免在多个文件中重复定义相同的全局变量或函数,因为这样的声明告诉编译器,这个变量或函数将在其他文件中定义。

4. 外部链接性:

默认情况下,C++ 的全局变量和函数具有外部链接性,可以被其他文件访问。使用 extern 声明时,可以显式地指定这是一个外部链接性的声明。

extern "C" {
    // 在C++中使用extern "C"声明以C链接方式进行
    void cFunction();
}

extern 还可以用于声明在其他编译单元中使用的模板实例。

// 在其他文件中定义
template<typename T>
extern void myTemplateFunction(T param);

总的来说,extern 用于声明在其他文件中定义的变量和函数,以及在 C++ 和 C 之间进行链接时的声明。

标签:文件,定义,C++,extern,声明,链接
From: https://www.cnblogs.com/keye/p/17884565.html

相关文章

  • C++(双冒号 :: )
    在C++中,双冒号::是作用域操作符(ScopeResolutionOperator)。它有两个主要用途:命名空间的使用:在例子中,seeta::ModelSetting表示ModelSetting类位于seeta命名空间中。命名空间用于组织代码,以防止命名冲突。通过::操作符,你可以指定在哪个命名空间中查找相应的标识符(类、......
  • C++(默认参数、占位参数)
    在C++中,函数默认参数和占位参数都是用于提供函数参数的一些默认值或占位符,从而增加函数的灵活性。默认参数(DefaultParameters):在C++中,可以为函数的一个或多个参数提供默认值。这意味着调用函数时,如果没有提供相应的实参,将使用默认值。默认参数必须从函数声明开始定义,然后只......
  • Qt/C++音视频开发58-逐帧播放/上一帧下一帧/切换播放进度/实时解码
    一、前言逐帧播放是近期增加的功能,之前也一直思考过这个功能该如何实现,对于mdk/qtav等内核组件,可以直接用该组件提供的接口实现即可,而对于ffmpeg,需要自己处理,如果有缓存的数据的话,可以通过在缓存中的数据往前移动往后移动即可。这样就要求做一个比较大的缓存队列,占用一定的内存是......
  • Qt6 c++教程1简介
    1Qt6简介Qt一个跨平台应用程序开发框架,旨在为桌面、嵌入式和移动平台创建具有统一用户界面(UI)的优秀软件应用程序。它为开发人员设计和构建优秀应用程序提供了一套强大的工具,而无需担心平台依赖性。本章主要内容:Qt介绍使用Qt的原因下载和安装Qt从源代码构建Qt61.1Qt简......
  • C++随机数
    C++中产生随机数的方式有产生一个随机数和产生一系列不重复的随机数两种方式;1.产生单个随机数通过rand()函数,需要先设置不同随机数种子,否则后面生成的每个随机数都一样,在此可以使用当前的时间作为种子。#include<cstdlib>#include<random>srand((unsigne......
  • C++socket服务器与客户端简单通信流程
    服务器和客户端简单通信的流程,做一个简单的复习:1.服务器创建的流程代码如下,各个重要函数已经写注释:#include<iostream>//推荐加上宏定义#defineWIN32_LEAN_AND_MEAN#include<winsock2.h>#include<Windows.h>#pragmacomment(lib,"ws2_32")usingnamespacestd;i......
  • C++学习笔记
    目录关键字const枚举switchcase函数常用函数代码块指针智能指针引用类与对象this指针静态成员静态成员变量静态成员函数继承与多态与抽象类动态内存拷贝浅拷贝命名空间I/O文件和流异常处理捕获异常抛出异常模板函数模板类模板STL容器(Containers)vectormap算法(Algorithm)迭代器(Itera......
  • C++(Protocol Buffers)
    ProtocolBuffers(简称Protobuf)是由Google开发的一种轻量级、高效、可扩展的数据序列化协议。它旨在成为一种语言无关、平台无关、可扩展、高效的数据交换格式。Protobuf通常用于在不同的系统或组件之间进行数据通信,如在分布式系统中,或者作为数据存储格式。以下是ProtocolBu......
  • C++(new操作符)
    在C++中,new操作符用于在动态内存(heap)上为对象动态分配内存,同时会调用对象的构造函数进行初始化。它返回一个指向新分配的内存空间的指针。new操作符的一般语法如下:cppCopycodenewtypenewtype[expression]其中,type是要分配内存的数据类型,expression是一个表示要分配......
  • C++/CLI 包装引用 Native C++ 简单测试
    托管C++这个项目名:CppCLI。Animals.h#pragmaonceusingnamespaceSystem;namespaceZoological{publicrefclassAnimals{public:intGetLegs();voidSetLegs(intlegs);String^GetName();voidSetName(String^nam......