昨天晚上翻《C++ Primer》偶尔看见介绍 extern "C" 的那一节,看着看着竟然有点糊涂了,觉得书上说的好像有点不对。记得以前也曾经看过这一节,也看过几篇介绍这个的文章,这次又犯糊涂,看来还是以前没有搞清楚。后来仔细看了看书上的介绍,又翻了一下《The C++ Programming Language》,总算清楚了一些,书上说的没错,是我以前理解的有问题。
在C++中 extern "C" 的两种用法
1. 如果要在C++程序中调用C语言写的函数, 在C++程序里边用 extern "C" 修饰要被调用的这个C程序,告诉C++编译器此函数是C语言写的,是C语言编译器生成的,调用他的时候请按照C语言习惯传递参数等。如:
//在C++程序里边声明该函数
extern "C" int strcmp(const char *s1, const char *s2);
也可以这样
//在C++程序里边声明该函数
extern "C" {
#include <string.h> //string.h里边包含了所要调用的函数的声明
}
2. 用C++语言写的一个函数,如果想让这个函数可以被其他C语言程序所用,则用extern "C" 来告诉C++编译器,请用C语言习惯来编译此函数。如:
//在C++程序里该函数
extern "C" int strcmp(const char *s1, const char *s2)
{
while (*s1 && *s1++ == *s2++) {
}
return *s1 - *s2;
}
分享到:
相关推荐
### const extern static volatile 小结 #### 一、Const(常量) `const` 关键字在 C/C++ 语言中用于定义常量,即其值在程序运行期间不可更改的变量。`const` 可以与多种数据类型结合使用,例如 `const int x = 10...
### 小结:extern "C" 通过上述讨论,我们可以总结出`extern "C"`的关键作用在于桥接C++和C代码之间的链接差异,使C++能够顺利地与C代码交互。在C++项目中使用C库或编写需要被C代码调用的C++库时,合理地使用`...
3. **extern "C"**:在C++中,extern "C"告诉编译器按照C语言的规则处理函数和变量,避免C++的名称修饰,使得C++代码可以调用C编译的函数。 4. **构造函数执行顺序**:构造函数的执行遵循基类(包括虚基类)→成员...
**注意**:这个示例仅展示了C语言中的部分功能,实际使用时需要进一步封装成Python模块。 #### 总结 本文介绍了Python与C/C++混编的四种常见方式:Python调用C动态链接库、Python调用C++类动态链接库、Python调用C/...
在C/C++编程语言中,`typedef`关键字被广泛用于提高代码的可读性、可维护性,并帮助创建平台无关的数据类型。本文旨在深入探讨`typedef`的功能、用法及其在实际编程中的应用。 #### `typedef`的基本概念 `typedef`...
至于内存使用方面,使用方法2(extern声明并在cpp文件中定义)通常会导致每个编译单元都有一个常量的副本,而方法1(直接在头文件中定义)则只有一个全局实例。然而,对于常量,内存使用通常不是主要考虑的因素,...
- **c语言返回栈变量**: 在C语言中返回栈变量的危险性。 - **c++返回栈对象**: C++中返回局部栈对象的方法和问题。 - **c++返回栈对象引用**: 如何安全地返回栈对象的引用。 ##### 4.10. 案例系统string与MyString ...
3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...
小结 23 术语表 23 第Ⅰ部分 C++基础 27 第2章 变量和基本类型 29 2.1 基本内置类型 30 2.1.1 算术类型 30 2.1.2 类型转换 32 2.1.3 字面值常量 35 2.2 变量 38 2.2.1 变量定义 38 2.2.2 变量...
3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...
小结 23 术语表 23 第Ⅰ部分 C++基础 27 第2章 变量和基本类型 29 2.1 基本内置类型 30 2.1.1 算术类型 30 2.1.2 类型转换 32 2.1.3 字面值常量 35 2.2 变量 38 2.2.1 变量定义 38 2.2.2 变量...
- extern“C”:用于C++中调用C语言编写的函数。 ##### 2.4 操作符重载 - 介绍操作符重载的概念及其用法。 ##### 2.5 默认参数 - 示例:展示如何为函数设置默认参数。 - 规则:讲解设置和使用默认参数的规则。 ##...
3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...
3.5.4 字符数据在内存中的存储形式及使用方法 10 3.5.5 字符串常量 11 3.5.6 符号常量 12 3.6 变量赋初值 12 3.7 各类数值型数据之间的混合运算 13 3.8 算术运算符和算术表达式 14 3.8.1 C运算符简介 14 3.8.2 算术...
3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...
3.5.4 字符数据在内存中的存储形式及使用方法 10 3.5.5 字符串常量 11 3.5.6 符号常量 12 3.6 变量赋初值 12 3.7 各类数值型数据之间的混合运算 13 3.8 算术运算符和算术表达式 14 3.8.1 C运算符简介 14 3.8.2 算术...
3.5.4 字符数据在内存中的存储形式及使用方法... 10 3.5.5 字符串常量... 11 3.5.6 符号常量... 12 3.6 变量赋初值... 12 3.7 各类数值型数据之间的混合运算... 13 3.8 算术运算符和算术表达式... 14 3.8.1 C...
3.5.4 字符数据在内存中的存储形式及使用方法 41 3.5.5 字符串常量 41 3.5.6 符号常量 42 3.6 变量赋初值 42 3.7 各类数值型数据之间的混合运算 43 3.8 算术运算符和算术表达式 44 3.8.1 C运算符简介 44 3.8.2 算术...