extern "C" 的含义:实现C++与C及其他语言的混合编程
C++中extern "C"的设立动机是实现C++与C及其他语言的混合编程。
通常,在模块的头文件里对本模块提供给其他模块引用的函数和全局变量以keywordextern声明。
与extern相应的keyword是static,被它修饰的全局变量和函数仅仅能在本模块中使用。因此。一个函数或变量仅仅可能被本模块使用时,其不可能被extern “C”修饰。
被extern "C"修饰的变量和函数是依照C语言方式编译和连接的。
// 模块A头文件 moduleA.h
int foo( int x, int y );
// moduleB.cpp
#include "moduleA.h"
foo(2,3);
实际上,在连接阶段,连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这种符号!
// 模块A头文件 moduleA.h
extern "C" int foo( int x, int y );
(1)模块A编译生成foo的目标代码时,没有对其名字进行特殊处理,採用了C语言的方式。
(2)连接器在为模块B的目标代码寻找foo(2,3)调用时,寻找的是未经改动的符号名_foo。
比如:
extern "C" int foo( int x, int y );
#include "a.h"
int foo( int x, int y ){return x + y;}
这样会编译出错:#include "a.h" */
extern int foo( int x, int y );
int main( int argc, char* argv[] ){
extern "C" 的含义:实现C++与C及其他语言的混合编程的更多相关文章
- [收藏转贴]struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int.long.float等)的变量,也可以是一些复合数据类型(如 arr ...
- 【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
本文为笔者阅读<嵌入式C精华>的摘录,推荐一下,不错的书 一.C/C++语言 struct深层探索 1.自然对界 struct是一种复合数据类型,其构成元素既可以是基本数据类型(如 int ...
- C和C++混合编程中的extern "C" {}
引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: 1 2 3 4 5 6 7 8 9 #ifdef __cplusplus extern "C" { #endif ...
- xcode 左边导航栏中,类文件后面的标记“A”,"M","?"……等符号的含义???
"M" = Locally modified "U" = Updated in repository "A" = Locally a ...
- 无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。
什么是排序规则(collation) 关于SQL Server的排序规则,估计大家都不陌生,在创建数据库时我们经常要选择一种排序规则(conllation),一般我们会留意到每一种语言的排序规则都有许 ...
- 变化Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析
基本介绍: 从以前的博客中提到,我们,最后,通过关机过程变化Android关机属性(SystemProperties.java由JNI呼叫接入系统属性),当然,我们也能adb命令变化Android系统 ...
- #ifdef __cplusplus extern "C" { #endif 含义
转载! 1.在好多程序中我们会遇到下面代码段 #ifdef __cplusplus extern "C" { #endif //c语法代码段 #if ...
- phpcms v9中 action="position" 和action="lists"有什么差别, 以及action 的属性和值
action值的含义: lists 内容数据(文章?)列表 relation 内容相关文章 hits 内容数据点击排行榜 category 内容栏目列表 position 内容推荐位列表
- NYOJ 741 "数学家"ST
"数学家"ST 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描写叙述 ST是个非常特别的人类,不仅喜欢做一些不同平常的事,并且对于在无聊的时候怎样打发时 ...
随机推荐
- Spring Cloud和Dubbo的对比
- 德尔福 XE5 安卓调试
https://stackoverflow.com/questions/2604727/how-can-i-connect-to-android-with-adb-over-tcp?page=2&am ...
- 如何用SQL语句在指定字段前面插入新的字段?
如何用SQL语句在指定字段前面插入新的字段? 2007-10-17 09:28:00| 分类: 笔记|举报|字号 订阅 create proc addcolumn @tablename va ...
- Java中this、static关键字的内存图解
Java中的关键字有很多,abstract default goto* null switch boolean do if package nchronzed break dou ...
- 零基础入门学习Python(31)--永久存储:腌制一缸美味的泡菜
知识点 pickle( 泡菜 ) 模块介绍: pickle模块作用是持久化的储存数据. 在Python程序运行中得到了一些字符串.列表.字典等数据,想要长久的保存下来,方便以后使用, 而不是简单的放入 ...
- 转:Centos7安装zabbix3.4超详细步骤解析
安装前准备: 1.1 安装依赖包: yum -y install wget net-snmp-devel OpenIPMI-devel httpd openssl-devel java lrzsz f ...
- linux nslookup-查询域名DNS信息的工具
博主推荐:更多网络测试相关命令关注 网络测试 收藏linux命令大全 nslookup命令是常用域名查询工具,就是查DNS信息用的命令. nslookup4有两种工作模式,即“交互模式”和“非交互模 ...
- list & dictionary
list不能直接进行对应,dictionary可以 list用[],dictionary用{}
- LeetCode(70) Climbing Stairs
题目 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cli ...
- POJ3169 差分约束 线性
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12522 Accepted: 6032 Descripti ...