1,c++调用c中的函数
需要在c文件的头文件中用#ifdef __cplusplus extern"C"...#ifdef __cplusplus声明需要调用的c文件中的函数,然后在c++文件中包含c文件的头文件。
//test.h
# ifndef TEST_H
# define TEST_H
//在extern "C"中声明c++中需要调用的c函数
#ifdef __cplusplus
extern "C" {
#endif
int add(int a, int b); // add函数声明
int sub(int a, int b); // sub函数声明
#ifdef __cplusplus
}
//test.c
#include "test.h"
int add(int a, int b)
{
return a + b;
}
//sub函数定义
int sub(int a, int b)
{
return a - b;
//mian.cpp
#include <iostream>
#include "file1.h"
using namespace std;
int main(void)
{
int a = 10;
int b = 11;
int c = add(a, b);
cout << "a+b=" << c << endl;
}
2,c文件调用c++文件中的函数。
调用c++里面的非成员函数
//file.h
extern "c" int add(int i);
//file.cpp
#include"file.h"
int add(int i)
{
return i*i;
}
//main.c
using namespace std ;
int add(i)
cout<< "add is " <<add(2)<<endl;
调用c++里面的成员函数,这个时候需要包装才能正确调用;
//file.h
#pragma once
class HJH
{
public:
int add(int a, int b)
{
return (a + b);
}
};
//file.cpp
#include "file.h"
extern "C" int add_cpp(int a, int b);
int add_cpp(int a, int b)
{
HJH hjh;
return hjh.add(a, b);
}
//main.c
#include "stdio.h"
extern int add_cpp(int a, int b);
int main()
{
printf("add_cpp = %d/n", add_cpp(2, 5));
return 0;
}