首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

C++面试基础系列-extern

  • 25-02-19 04:41
  • 3474
  • 6065
blog.csdn.net

系列文章目录

总目录链接


文章目录

  • 系列文章目录
    • 总目录链接
  • C++面试基础系列-extern
    • 1.extern关键点
    • 2.C++ extern `"C"`
    • 3.使用示例
    • 关于作者


C++面试基础系列-extern

1.extern关键点

在C和C++中,extern是一个关键字,用于声明一个变量或函数是在其他文件或编译单元中定义的,即它具有外部链接。以下是 extern的一些关键点:

  1. 外部链接 :extern关键字声明的变量或函数具有外部链接,这意味着它们可以在多个文件中访问。
  2. 声明而非定义 :使用 extern是声明一个已经在其他地方定义的变量或函数,而不是定义它们。
  3. 多文件共享 :当你想在多个文件中使用同一个全局变量或函数时,可以在其他文件中使用 extern来声明它们。
  4. 定义位置 :被 extern声明的变量或函数必须在某个文件中有确切的定义(带有类型和存储期的声明)。
  5. 头文件中使用 :extern经常与头文件一起使用,允许在多个源文件中包含同一个头文件,而不会因多重包含而导致变量或函数被多次定义。
  6. C++中的使用 :在C++中,extern也可以用于声明C语言编写的库中的变量和函数,因为它可以用来指定C语言的外部链接。
  7. 存储期 :extern声明的变量具有静态存储期,即它们在程序的整个运行期间都存在。
  8. 作用域 :extern声明的变量或函数在声明它们的文件中是可见的,但它们的作用域限制在声明它们的块内,除非它们在全局作用域中声明。
  9. 初始化 :extern声明的变量不能在声明时初始化,因为它们已经在其他地方定义并初始化了。
  10. 示例:
// file1.c
int globalVar = 42; // 定义并初始化一个全局变量

// file2.c
extern int globalVar; // 声明 globalVar,它在 file1.c 中定义
  • 1
  • 2
  • 3
  • 4
  • 5

在上述示例中,globalVar在 file1.c中定义并初始化。在 file2.c中,使用 extern关键字来声明 globalVar,表示它在其他地方定义,这样 file2.c就可以访问 globalVar了。

extern是C和C++中实现不同文件间全局变量和函数共享的重要机制。

2.C++ extern "C"

在C++中使用C语言编写的库时,extern "C"(注意C是大写的)是一个特殊的声明,它告诉C++编译器按照C语言的规则来处理被声明的实体。这主要是因为C++支持函数重载,而C语言不支持。以下是 extern "C"的一些特别作用:

  • 语言链接指示 :extern "C"指示编译器,被声明的函数或变量遵循C语言的链接规则,而不是C++的命名规则(Name Mangling)。
  • 避免名称重整(Name Mangling) :C++编译器会对函数名进行编码(即名称重整),以支持函数重载。而C语言没有函数重载的概念,其函数名在编译后不会改变。使用 extern "C"可以防止C++编译器对C函数名进行重整。
  • 兼容C库 :当需要链接C语言编写的库时,使用 extern "C"可以确保C++代码能够正确调用C库中的函数和变量。
  • C++和C的互操作 :extern "C"是C++代码与C代码进行互操作的一种方式,使得C++程序能够直接调用C语言的函数和访问全局变量。
  • 头文件包含 :在使用C语言库的头文件时,通常也会用 extern "C"将整个头文件的内容包裹起来,以确保所有引用的函数和变量都遵循C语言的链接规则。
  • 全局作用域 :extern "C"声明通常放在全局作用域中,以确保整个程序中的C++代码都遵循相同的链接规则。

extern "C"是C++中处理C语言库的重要工具,它确保了C++代码能够与C语言代码无缝集成和互操作。

3.使用示例

  • C++中使用 extern “C” 示例 :
// 假设有一个C语言写的库函数,声明如下:
// int CFunction(); // C语言中的函数声明

// 在C++中调用C语言写的库函数
extern "C" {
    int CFunction(); // 使用extern "C"声明
}

int main() {
    int result = CFunction(); // 正确调用C函数
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • C并不能直接调用C++库函数。

关于作者

  • 微信公众号:WeSiGJ
  • GitHub:https://github.com/wesigj/cplusplusboys
  • CSDN:https://blog.csdn.net/wesigj
  • 微博:
  • -版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
WeSiGJ
微信公众号
共同分享,共同交流, 共同学习!
注:本文转载自blog.csdn.net的WeSiGJ的文章"https://blog.csdn.net/wesigj/article/details/141327786"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top