C与C++文件中方法相互调用

24 篇文章 1 订阅
18 篇文章 0 订阅

简述

我们在编写C程序或C++程序时,C调C 或 C++调C++都是非常简单的,但是C如何调C++中的方法呢?C++又如何调用C中的方法呢?

因为编译器在编译C++和C的方法时方式是不同的,所以肯定不能直接按照C或C++中的方式来调用。正确的调用方式是需要结合“__cplusplus”和“extern "C””来使用,下面结合实例来介绍。

详解

1、C文件调用C++文件中方法

首先在C++文件(.cpp)中编写C需要调用的方法:

/************************************************************************/
/*		                 C 调 C++ 的函数                                */
/************************************************************************/

extern "C"
{
	void showInfo(char* data)
	{	

		CString m_show = "    ";
		m_show += data;
		g_VoiceText->m_showList.SetSel(sel_begin, -1);
		g_VoiceText->m_showList.GetSel(sel_begin, sel_curr);
		g_VoiceText->m_showList.ReplaceSel(m_show);
		return;
	}

	void nextLine()
	{	
		CString m_show= "";
		m_show += "\r\n";
		m_show += "\r\n";
		g_VoiceText->m_showList.GetSel(sel_begin, sel_curr);
		g_VoiceText->m_showList.SetSel(sel_curr, -1);
		g_VoiceText->m_showList.ReplaceSel(m_show);	
		g_VoiceText->m_showList.GetSel(sel_begin, sel_curr);
		sel_begin = sel_curr;
 		return;
	}
}

然后在C文件中声明需要调用的C++中的方法:

调用时直接使用即可:

 

这样就完成了C文件调用C++文件中方法的所有操作了。

extern "C"表示编译生成的内部符号名使用C约定。

2、C++文件调用C文件中方法

首先在C文件中编写C++需要调用的方法:

/************************************************************************/
/*		                 C++ 调 C 的函数                                */
/************************************************************************/
//在MFC中使用控制台输出
void InitConsole()
{
	int nRet= 0;
	FILE* fp;
	AllocConsole();
	nRet= _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
	fp = _fdopen(nRet, "w");
	*stdout = *fp;
	setvbuf(stdout, NULL, _IONBF, 0);
}

void QuitAll()
{	
	end_status = 1;	
}

然后在C++文件(.cpp)中声明C文件中的方法,注意,不是普通的声明,而是结合“__cplusplus”和“extern "C””来声明,告诉编译器,这是C方法,需要使用C方式来编译它们。

调用时,直接使用即可:

这样就完成了C++文件调用C文件中方法的所有操作了。

这里为什么要用:

#ifdef _cplusplus 
extern "C"{ 
#endif 
    //函数
#ifdef _cplusplus 
} 

来声明方法呢?因为这样我们在C和C++都可以调用。如果只是以下面这种方式来声明:

extern "C"{ 
    //函数 
} 

那么就只能在C文件中使用了。

附两篇相关的博客:博客1  博客2

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值