在 C++ 中使用 extern C
本文讨论 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# 中等效的 C++ Map<T1, T2>
发布时间:2024/02/01 浏览次数:147 分类:编程语言
-
可以使用 C# 中的 SortedDictionary
和 Dictionary 类代替 C++ 中的 map 。
C# 中等效的 C++ Map<T1, T2>
发布时间:2024/01/20 浏览次数:187 分类:编程语言
-
可以使用 C# 中的 SortedDictionary
和 Dictionary 类代替 C++ 中的 map 。
如何在 C++ 中实现毫秒级的睡眠
发布时间:2024/01/02 浏览次数:230 分类:C++
-
本文介绍了在 C++ 中使用不同方法暂停程序执行,实现睡眠的方法。本文介绍了在 C++ 中睡眠毫秒的方法。使用 std::this_thread::sleep_for 方法在 C++ 中睡眠
如何在 C++ 中将双精度数四舍五入到整数上
发布时间:2024/01/02 浏览次数:151 分类:C++
-
本文演示了如何在 C++ 中把双精度数四舍五入到整数中。本文将为大家讲解几种在 C++ 中如何将双精度数四舍五入为整数的方法。使用 round() 函数将双精度数四舍五入到整数
如何在 C++ 中以毫秒为单位获取时间
发布时间:2024/01/02 浏览次数:142 分类:C++
-
本文介绍了如何在 C++ 中获取以毫秒为单位的时间。本文将介绍多种 C++ 方法,介绍如何以毫秒为单位获取时间。
如何在 C++ 中把 Char 数组转换为 Int
发布时间:2024/01/02 浏览次数:143 分类:C++
-
本文演示了在 C++ 中把 char 数组转换为 int 类型的方法。本文将介绍将 char 数组转换为 int 类型的 C++ 方法。使用 std::strtol 函数将 char 数组转换为 int 类型
如何在 C++ 中将 ASCII 码转换为字符
发布时间:2024/01/02 浏览次数:520 分类:C++
-
本文介绍了在 C++ 中如何将 ASCII 值转换为 char 的方法。本文将演示关于如何在 C++ 中把 ASCII 值转换为字符的多种方法。在 C++ 中使用赋值运算符将 ASCII 值转换为字符
如何在 C++ 中把十进制转换为二进制
发布时间:2024/01/02 浏览次数:239 分类:C++
-
本文介绍如何在 C++ 中把十进制数转换成二进制数。本文将介绍几种在 C++ 中如何将十进制数转换为二进制表示的方法。在 C++ 中使用自定义定义的函数将十进制数转换为二进制数