迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

在 C++ 中使用 extern C

作者:迹忆客 最近更新:2023/08/18 浏览次数:

本文讨论 C++ 中的名称重整,这是理解 C++ 中 extern "C" 影响的先决条件。 此外,它还介绍了 C++ 编程中的 extern“C”。


C++ 中 extern "C" 的使用

我们使用extern关键字来定义全局变量,也称为外部变量,在方法(函数)之外定义。 我们可以在整个程序中使用这些变量并使用函数修改值。

当 C++ 文件中使用 extern 关键字时,C++ 中的特定函数名称具有 C 链接。 在这种情况下,编译器不会破坏函数名称。

C++ 编程中的 mangling 是什么意思?

这是理解C++中extern关键字的先决条件。 那么,我们先来了解一下名字重整。

C++编程支持函数重载功能。 我们可以有多个具有相同名称但具有不同数量的参数及其数据类型的函数。

这里不考虑返回数据类型。 关心的是重载函数在目标代码中如何区分。

通过添加有关各自参数的详细信息,可以在目标代码中更改函数名称。 这里用于添加参数信息的技术是名称修改。

请记住,C++ 编程中没有用于名称修改的标准化技术。 这就是各种编译器使用各种技术的原因。

下面是C++编程中name mangling的实际演示。 下面的代码具有三个名为calculate 的重载函数和一个main 方法。

示例代码:

int calculate(int number) {
   return number*number;
}
double calculate(double number) {
   return number*number;
}
float calculate(float number) {
   return number*number;
}
int main(void) {
   int number1 = calculate(3);
   double number2 = calculate(3.38);
   float number3 = calculate(3.00);
}

C++ 编译器更改上述代码以区分重载函数。

示例代码:

int __calculate_i(int number){
   return number*number;
}
double __calculate_d(double number){
   return number*number;
}
float __calculate_f(float number){
   return number*number;
}

int __main_v(void){
   int number1 = __calculate_i(3);
   double number2 = __calculate_d(3.38);
   float number3 = __calculate_f(3.00);
}

C 编程不支持函数重载。 因此,当我们将 C 代码链接到 C++ 文件时,我们需要确保函数名称不会更改。

下面的代码片段会生成错误,因为编译器更改了 printf() 函数的名称,并且找不到更改/更新的 printf() 函数的定义。

示例代码:

int printf(const char *format,...);
int main() {
   printf("I'm learning the use of Extern in C++");
}

我们在C++编程中使用extern关键字来消除这个问题。 每当 C++ 编译器在 extern "C" {} 块内找到代码时,它都会确保函数名称保持不变。

这意味着函数的名称不会被更改,这将使程序成功执行。 请记住,不同的编译器可能会为这些代码块生成不同的输出。

示例代码:

extern "C"{
   int printf(const char *format,...);
}
int main() {
   printf("I'm learning the use of Extern in C++");
}

输出:

I'm learning the use of Extern in C++

因此,extern “C” 是一个链接规范,必须在命名空间的范围内。 外部“C”将忽略类成员。

每当我们想要链接 C++ 文件中的 C 代码时,都必须使用此关键字。

上一篇:C++中的串口连接

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

C++中的串口连接

发布时间:2023/08/18 浏览次数:151 分类:C++

本文介绍了使用 Windows API 打开、读取、写入和管理串行端口连接的基础知识。本文的主要目的是让您基本了解编程中的串行通信如何工作,并让您朝着正确的方向开始。

C++ 中的反射

发布时间:2023/08/18 浏览次数:171 分类:C++

本文将讨论 C++ 中的反射、目的和实现。 我们将进一步研究使用反射的优点和缺点。C++ 中的反射 反射是一种编程机制,允许您编写适用于任何对象类型的通用代码。

C++ 中 DWORD 和 Unsigned Int 的区别

发布时间:2023/08/18 浏览次数:187 分类:C++

本文将介绍 DWORD 在 C++ 中的一般用法,它与 unsigned int 有着根本的不同,尽管它们目前具有相同的值。C++ 中 DWORD 和 unsigned int 的区别 根据定义,unsigned int 至少有 16 位长。 unsigned int 通常是特定

修复 C++ 中的分段错误

发布时间:2023/08/18 浏览次数:192 分类:C++

本文将讨论 C++ 中的分段错误并提供解决此问题的解决方案。C++ 中的分段错误当您的程序或系统尝试访问超出其范围的内存时,C++ 中就会出现分段错误。 这是导致程序在运行时崩溃的常见情况

解决 C++ 中错误 Python.h: No Such File or Directory

发布时间:2023/06/29 浏览次数:233 分类:Python

本文将解释如何解决错误 'Python.h': No such file or directory。 当我们尝试在 C++ 中嵌入 Python 代码,但编译器无法在系统内部找到对 Python 的引用时,通常会发生这种情况。C++ 中 'Python.h': No such file

在 C++ 中通过掷骰子生成随机值

发布时间:2023/04/09 浏览次数:172 分类:C++

本文解释了如何使用时间因子方法和模拟 C++ 中的掷骰子的任意数方法生成随机数。了解它是如何工作的以及它包含哪些缺点。提供了一个 C++ 程序来演示伪数生成器。

在 C++ 中使用模板的链表

发布时间:2023/04/09 浏览次数:162 分类:C++

本文解释了使用模板在 C++ 中创建链表所涉及的各个步骤。工作程序演示了一个链表,该链表使用模板来避免在创建新变量时声明数据类型的需要。

在 C++ 中添加定时延迟

发布时间:2023/04/09 浏览次数:235 分类:C++

本教程将为你提供有关在 C++ 程序中添加定时延迟的简要指南。这可以使用 C++ 库为我们提供的一些函数以多种方式完成。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便