因为历史上是先有C后有C++,所以C++中调用C中的函数加个extern "C" 既可.
假如C的文件为c.c和c.h,C中有C_fun()函数
C++的文件为cpp.cpp和cpp.h
-----------------------------------------------------------------------------
c.h的实现
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
void C_fun();
#ifdef __cplusplus
}
#endif
#endif
-----------------------------------
c.c的实现
#include "c.h"
void C_fun()
{
}
------------------------------------
在擦cpp.cpp中调用c.c中的C_test()
cpp.cpp的实现
#include "c.h"
int main()
{
C_fun()
}
其中__cplusplus是C++编译器的保留宏定义.就是说C++编译器认为这个宏已经定义了.
所以关键是extern "C" {}
extern "C"是告诉C++编译器件括号里的东东是按照C的obj文件格式编译的,要连接的话按照C的命名规则去找.
================================
那么C中是如何调用C++中的函数cpp_fun()呢?
因为现有C后有C++, 所以只能从C++的代码中考虑了.
加入C++中的函数或变量有可能被C中的文件掉用,则应该这样写,也是用extern "C"{}
不过是代码中要加,头文件也要加,因为可能是C++中也调用
--------------------------------------
cpp.h的实现
#ifndef _c_h_
#define _c_h_
#ifdef __cplusplus
extern "C" {
#endif
void CPP_fun();
#ifdef __cplusplus
}
#endif
#endif
.-----------------------------------------------
Cpp.cpp的实现
extern "C" { //告诉C+++编译器,扩号里按照C的命名规则编译
void CPP_fun()
{
.....
}
}
分享到:
相关推荐
本文将详细探讨C语言与C++互相调用的方法。 首先,我们来看C语言调用C++函数的情况。由于C++是C的超集,大部分C代码可以在C++环境中编译运行,因此C调用C++的函数相对直接。但是,C++引入了名字修饰(Name Mangling...
下面对lua和c/c++的交互调用做一个实例分析: lua提供了API用于在c/c++中构造lua的运行环境,相关接口如下: //创建lua运行上下文 lua_State* luaL_newstate(void) ; //加载lua脚本文件 int luaL_loadfile(lua_...
本文将深入探讨C++和Objective-C互相调用的原理与实践。 首先,理解C++和Objective-C之间的差异是至关重要的。C++是一种强大的、面向对象的编程语言,以其效率和灵活性而闻名。而Objective-C是在C的基础上添加了...
本主题将深入探讨如何实现`WebBrowser`中的JavaScript (JS) 和C++代码之间的互调用,这对于增强桌面应用的交互性和功能扩展性非常有用。 ### 一、JS调用C++ 1. **对象注册**:在C++中,你需要创建一个COM对象,并...
原文出处: http://lauwd.blog.163.com/blog/static/7605696920107429017/ 讲述了,c++和tcl联合使用的基本方法。
标题《C++和C语言如何互相调用.pdf》暗示了本文档将围绕C++和C语言之间如何实现互操作的核心问题展开讨论。C++和C语言作为两种广泛使用的编程语言,虽然它们在语法和设计哲学上有所不同,但在实际开发中常常需要相互...
2. C和C++之间库的互相调用: - extern "C"理解:extern "C"不是指C语言,而是一种链接约定。它允许C++编译器按照C语言的链接方式来编译和连接函数,这对于混合使用C和C++代码的项目非常重要。 - extern "C"的作用...
标题:“C++和Java互相调用实例”意味着我们将讨论在Android应用开发中,如何利用C++(通过NDK)与Java代码进行交互。这通常用于优化性能关键的部分,如游戏引擎、图像处理或加密算法等,因为C++的执行效率比Java更...
本文将详细探讨如何实现C++与JavaScript的互相调用,以及在这个过程中涉及的关键知识点。 首先,我们要了解C++和JavaScript是两种完全不同的编程语言,它们的应用场景各有侧重。C++是一种静态类型的、编译型的语言...
总结起来,C++和C语言之间的互相调用涉及到的关键点有: 1. 使用`extern "C"`声明来告诉C++编译器某些函数或变量应按照C语言的方式处理,避免名称修饰。 2. C++可以直接引用C标准库,因为C++编译器已经对C库的头文件...
"Lua C/C++互相调用学习案例"的主题正聚焦于这一技术,特别是如何在C/C++项目中集成和使用Lua脚本语言。这个学习案例基于Visual Studio 2015开发环境,适合想要了解或提升这方面技能的开发者。 首先,Lua是一种轻量...
在Matlab环境中,为了利用C或C++的强大性能和高效计算能力,我们有时需要在Matlab的.m文件中调用C或C++编写的函数。这种混合编程方式可以帮助我们实现一些Matlab自身不支持或者效率较低的操作。下面将详细介绍如何在...
#### 三、C和C++之间的库互相调用 C和C++之间库的相互调用是常见的场景,特别是在混合编程项目中。 ##### 1. `extern "C"`的理解 - **概念澄清**:“C”实际上指的是链接约定,并非仅仅指C语言本身。这种约定同样...
总结,C++和Lua的互相调用使得开发者可以在需要高性能计算的地方使用C++,而在需要快速原型设计和灵活脚本控制的地方使用Lua。这种组合在游戏开发、自动化测试、服务器等领域广泛应用,提供了强大的灵活性和效率。...
1. 注册C++函数:在C++中,你需要使用`lua_register`或`lua_CFunction`定义一个C++函数,使其能在Lua中调用。例如: ```cpp static int myCppFunction(lua_State *L) { // 获取参数并进行操作 int arg = lua_to...
首先,我们需要在Android Studio项目中配置NDK(Native Development Kit),它是Android用于编写和编译C/C++代码的工具集。在项目的build.gradle文件中,添加以下配置: ```groovy android { defaultConfig { ...
在本主题中,我们将深入探讨如何实现WebAssembly与C++之间的互相调用。 ### 1.1 单个lib的编译和链接方法 首先,你需要使用Emscripten工具链来将C++代码编译为WebAssembly模块。Emscripten是一个基于LLVM的编译器...
- **JNI接口定义**:JNI定义了一套接口和数据类型,使得Java和本地代码可以互相调用函数。 - **头文件`jni.h`**:C/C++代码中需要包含`jni.h`头文件,该文件包含了所有JNI相关的函数声明和数据类型定义。 - **...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言(如C/C++)的代码进行交互。本项目演示了如何在Android应用中使用JNI,实现C/C++与Java的双向调用。以下是关于这个主题...
本教程将深入探讨如何使用 JNI 实现 Java 和 C++ 之间的互相调用,以及如何处理不同类型的数据。 首先,我们需要理解 JNI 的基本概念。JNI 是一个接口,它定义了一套函数,这些函数在 JVM(Java 虚拟机)内部提供对...