c调用c++函数

简介: c调用c++普通函数    cpp_test/cpp.h#ifndef CPP_H#define CPP_H#include "extern_cpp.h"int add(int a, int b);char add(char a, char b);#endif // CPP_H    cpp_test/extern_cpp.
  • c调用c++普通函数
    cpp_test/cpp.h

#ifndef CPP_H
#define CPP_H

#include "extern_cpp.h"

int add(int a, int b);
char add(char a, char b);

#endif // CPP_H

    cpp_test/extern_cpp.h

#ifndef EXTERN_CPP_H
#define EXTERN_CPP_H

#ifdef __cplusplus
extern "C"
{
#endif

int add_int(int a, int b);
char add_char(char a, char b);

#ifdef __cplusplus
}
#endif

#endif // EXTERN_CPP_H

    cpp_test/cpp.cpp

#include "cpp.h"

#include <iostream>

int add(int a, int b)
{
    std::cout << "int a+b=" << a+b << std::endl;
    return a+b;
}

char add(char a, char b)
{
    std::cout << "char a+b=" << a+b << std::endl;
    return a+b;
}

int add_int(int a, int b)
{
    return add(a,b);
}

char add_char(char a, char b)
{
    return add(a,b);
}

    c_test/main.c

#include <stdio.h>

#include "../cpp_test/extern_cpp.h"

int main(int argc, char *argv[], char *env[])
{
    printf("%d\n", add_int(2,3));
    printf("%c\n", add_char(20, 30));

    return 0;
}

编译 g++ -c cpp.cpp       
    gcc main.c ../cpp_test/cpp.o -lstdc++

  • c调用c++类函数
     cpp_test/cpp.h

#ifndef CPP_H
#define CPP_H

#include "extern_cpp.h"

struct example
{
public:
    example(void);
    example(int i, int j);
    ~example(void);
    int add(void);
    int a,b;
};

#endif // CPP_H

    cpp_test/extern_cpp.h

#ifndef EXTERN_CPP_H
#define EXTERN_CPP_H

#ifdef __cplusplus
extern "C" {
#endif

typedef struct example example;
example* exmaple_create(int a, int b);
void example_delete(example* e);
int example_add(example* e);

#ifdef __cplusplus
}
#endif

#endif // EXTERN_CPP_H

    cpp_test/cpp.cpp

#include "cpp.h"
#include <iostream>
example::example(void){}
example::example(int i, int j):a(i),b(j){}
example::~example(void){}

int example::add(void)
{
    std::cout << "a+b=" << a+b << std::endl;
    return a+b;
}

example* exmaple_create(int a, int b)
{
    return new example(a, b);
}

void example_delete(example* e)
{
    delete e;
}

int example_add(example* e)
{
    return e->add();
}

    c_test/main.c
#include <stdio.h>
#include "../cpp_test/extern_cpp.h"

int main(int argc, char *argv[], char *env[])
{
    example *e = exmaple_create(2, 3);
    printf("%d\n", example_add(e));
    example_delete(e);

    return 0;
}
编译 g++ -c cpp.cpp

        gcc main.c ../cpp_test/cpp.o -lstdc++


目录
相关文章
|
1天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
13天前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
36 6
|
13天前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
16 0
C++ 多线程之线程管理函数
|
17天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
22 3
|
17天前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
71 1
|
17天前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
19 1
|
17天前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
29 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
20 3
|
2月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
2月前
|
C++
c++常见函数及技巧
C++编程中的一些常见函数和技巧,包括生成随机数的方法、制表技巧、获取数字的个位、十位、百位数的方法、字符串命名技巧、避免代码修改错误的技巧、暂停和等待用户信号的技巧、清屏命令、以及避免编译错误和逻辑错误的建议。
24 6