C与Cpp混合调用

函数重载

  • C 语言不支持重载,相同名字会报错
  • C++支持重载,通过compile的中间流程,生成含有方法签名信息(形参类型、形参顺序、方法名称)新的方法名称(mangled name),来进行重载
  • 通过 extern “C” 可以解决混编问题
重载定义
  • 同一作用域类
  • 函数名相同
  • 参数列表不同(个数不同或类型不同)
  • 返回值任意

代码

git地址:git@github.com:AlbertSnow/algorithm.git

C 调用 CPP
  1. CPP在cpp文件中添加
// #include <iostream>
#include <stdio.h>
extern "C" {
void CallCpp()
{
    printf("++++++ Im cpp +++++++");
    // std::cout << "I'm out this place";
}
}
  1. 注意不能有C无法访问的库
  2. 头文件不用加 extern
CPP 调用 C
  1. extern 来wrap 头文件
#include <iostream>

extern "C" {
#include "CLang.h"
}

int main() {
    std::cout << "----- Cpp call c method -----\n";
    CallC();
}

总结

  1. C不支持函数名称重载,C++支持
  2. external关键字
    • c 调用 cpp, 在CPP的cpp文件中wrap实现
    • cpp 调用 c, 在CPP的cpp文件中wrap 对c头文件的include
external
  1. external functionName
    表示 symbol 来自于外界,先通过编译&#
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例,展示如何在VSCode中使用C和C++混合编程: ```c++ #include <stdio.h> extern "C" { #include "myCFile.h" // 包含C文件的头文件 } int main() { int a = 10; int b = 20; int result = add(a, b); // 调用C函数 printf("The result is: %d\n", result); return 0; } ``` 这里,我们在C++代码中使用`extern "C"`关键字,告诉编译器这是一个C语言函数。然后,在`main()`函数中,我们调用了一个C函数`add()`,该函数在`myCFile.h`头文件中声明。 在VSCode中,我们可以使用C/C++扩展来编译和运行此代码。在`.vscode`文件夹中创建一个`tasks.json`文件,指定编译器和编译选项: ```json { "version": "2.0.0", "tasks": [ { "label": "gcc build", "type": "shell", "command": "gcc", "args": [ "-g", "-Wall", "-o", "${fileDirname}/${fileBasenameNoExtension}.out", "${file}" ], "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "silent", "focus": false, "panel": "shared" }, "problemMatcher": { "owner": "cpp", "fileLocation": ["absolute"], "pattern": { "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", "file": 1, "line": 2, "column": 3, "severity": 4, "message": 5 } } } ] } ``` 然后,我们可以使用`Ctrl+Shift+B`快捷键来编译代码,并使用`F5`来运行代码。 注意:如果您的C文件中包含了C++标准库头文件(如`<iostream>`),则需要将C文件的扩展名更改为`.cpp`,以便C++编译器能够正确识别它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值