bug记录——C语言调用C++函数接口

6 篇文章 0 订阅

结论

当C语言 需要调用C++函数接口(比如func.h,func.cpp)时,func.h中不能出现c++特有的class定义或头文件包含。即:关于class的定义或含有class的头文件包含必须放在源文件中(如func.cpp中),不能放在头文件(func.h,无论是extern “C” 里还是exter "C"外)中

一个小bug卡了好多天。。特此记录。。。

证明

main.c代码如下:

#include <stdio.h>
#include "func.h"
typedef  unsigned char   UINT8;

int main(){
	
	printf("result=%d\n",add(2,3,2));
	printf("result=%d\n", add(2, 3,1));
	char buf[] = "hello";
		
	printf("%d\n",str(buf));
	UINT8 payload[100];
	refillDataForTteEnd( payload);
	system("pause");
	return 0;
}

func.h代码如下:

#ifndef __FUNC__
#define __FUNC__

//class A{   //class A的定义放在func.h中编译会报错(无论放在extern "C"之外还是extern "C"之内都汇报错),放在func.cpp中可以正常。包含含有class定义的头文件同理。
//public:
//	int a;
//};
#ifdef __cplusplus             //告诉编译器,这部分代码按C语言的格式进行编译,而不是C++的
extern "C"{
#endif
	
	int  add(int a, int b, int flag);
	int str(char* buf);
	typedef  unsigned char   UINT8;
	void refillDataForTteEnd(UINT8* payload);
#ifdef __cplusplus
}

#endif

#endif


func.cpp代码如下:
```cpp
#include <iostream>
#include "func.h"
#include "overload.h"

class A{
public:
	int a;
};
int  add(int a, int b,int flag){
	std::cout << "int add()" << std::endl;
	std::cout << __cplusplus << std::endl;
	A h;
	h.a = 23;
	std::cout << "h,a = " << h.a << std::endl;
	if (flag == 1){
		return addnum(a, b);
	}
	else{
		return addnum(a, b, flag);
	}


}

int str(char* buf){
	return strlen(buf);

}

void refillDataForTteEnd(UINT8* payload) {
	A h;
	h.a = 23;
	std::cout << "refillDataForTteEnd " << h.a << std::endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值