• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C/C++中extern "C" 的作用分析

C/C++中extern "C" 的作用分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了C/C++中extern "C" 的作用分析等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我们经常会在C/C++程序中见到extern "C",这是一个很重要的概念。本文就来以实例形式讲述C/C++中extern "C"的作用。分享给大家供大家参考之用。具体分析如下:

作用:实现C和C++混合编程。

原理:C和C++编译器编译之后,函数名会编译成不同的名字,链接阶段名字查找会找不到目标,后面实例中会详解。

用法:
①.c文件中定义的函数,.cpp文件要调用时,该.cpp文件中要用extern "C"声明该函数;
②.反过来,.cpp文件中定义的函数,.c文件要调用,则同样要在.cpp文件中用extern "C"声明,.c文件只用普通的extern声明。

两个源文件分别编译成.o文件,再链接成执行文件。链接.o文件生成执行文件时,必须得用g++。

实例:

在源文件中声明的,没有头文件

.c文件定义的函数,.cpp文件调用:

//.c文件定义的函数
extern int myadd(int a, int b);
int myadd(int a, int b)
{
  return a+b;
}

</div>
//.cpp文件调用
#include <iostream>
using namespace std;
extern "C" int myadd(int a, int b);
int main()
{
  cout << myadd(3, 7) << endl;
  return 0;
}

</div>

.cpp文件定义的函数,.c文件调用:

//.cpp文件定义的函数
extern "C" int myadd(int a, int b);
int myadd(int a, int b)
{
  return a + b;
}

</div>
//.c文件调用
#include <stdio.h>
extern int myadd(int a, int b);
int main()
{
  printf("%d\n", myadd(3, 7));
  return 0;
}

</div>

如果在头文件中声明,则.c文件正常的包含该头文件,.cpp文件应该用

//.cpp文件的包含方式
extern "C"
{
  #include "myHead.h"
}

</div>

的方式来包含头文件,该头文件中声明的函数都为C方式编译。

原理补充:C文件中,上述函数编译之后的函数名为类似于_myadd的形式,而CPP的编译之后函数名为类似于_myadd_int_int的形式,因为CPP要支持重载,用这种方式来区别重载的函数。

相信本文所述对大家的C++程序设计有一定的借鉴价值。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28用C++实现单向循环链表的解决方法
  • 2017-05-28C++中实现矩阵的加法和乘法实例
  • 2017-05-28C 转移表/转换表的深入分析
  • 2022-04-30C语言数组指针(指向数组的指针)详解
  • 2017-05-28浅谈c++ stl迭代器失效的问题
  • 2017-05-28c++ 巧开平方的实现代码
  • 2017-05-28C语言中的数组和指针汇编代码分析实例
  • 2017-05-28C语言 表、栈和队列详解及实例代码
  • 2017-05-28成员初始化列表与构造函数体中的区别详细解析
  • 2017-05-28C++多态的实现机制深入理解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于在MFC中将窗口最小化到托盘实现原理及操作步骤
    • 通俗地理解什么是编程语言
    • C语言通过深度优先搜索来解电梯问题和N皇后问题的示例
    • C语言for语句用法详解
    • C++写注册表项实例
    • 详解C++中的this指针与常对象
    • 数据结构顺序表操作示例
    • 深入Windows下的回车是回车换行(\r\n)还是换行回车(\n\r)的详解
    • 深入单链表的快速排序详解
    • C++中求组合数的各种方法总结详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有