如何在c++/C项目中使用C/C++源文件?

之前学习了C与C++混合编程问题总结,下面着重学习一下在C++/C项目中使用C/C++源文件。

在C++项目中,包含C源文件的.h文件会因为C和C++的标准不同而导致很多错误。 如何在 C++/C 项目中使用 C /C++源文件?

1.C++ 项目中调用C

C++ 调用 C 非常简单:每个 C 函数只有一个可能的非混淆符号,因此不需要额外的工作。

  • main.cpp文件
#include <cassert>

#include "c.h"

int main() {
    assert(f() == 1);
}
  • c.h文件
#ifndef C_H
#define C_H

/* 这个 ifdef 允许C 和 C++ 使用头文件。*/
#ifdef __cplusplus
extern "C" {
#endif
int f();
#ifdef __cplusplus
}
#endif

#endif
  • c.c文件
#include "c.h"

int f() { return 1; }
  • 运行
g++ -c -o main.o -std=c++98 main.cpp
gcc -c -o c.o -std=c89 c.c
g++ -o main.out main.o c.o
./main.out

2.C项目中调用C++

调用c++ from有点困难:我们必须手动创建要公开的每个函数的未被破坏的版本。
这里我们说明如何向 C 公开 C++ 函数重载。

  • main.c文件
#include <assert.h>

#include "cpp.h"

int main(void) {
    assert(f_int(1) == 2);
    assert(f_float(1.0) == 3);
    return 0;
}
  • cpp.h文件
#ifndef CPP_H
#define CPP_H

#ifdef __cplusplus
// C cannot see these overloaded prototypes, or else it would get confused.
int f(int i);
int f(float i);
extern "C" {
#endif
int f_int(int i);
int f_float(float i);
#ifdef __cplusplus
}
#endif

#endif
  • cpp.cpp文件
#include "cpp.h"

int f(int i) {
    return i + 1;
}

int f(float i) {
    return i + 2;
}

int f_int(int i) {
    return f(i);
}

int f_float(float i) {
    return f(i);
}
  • 运行
gcc -c -o main.o -std=c89 -Wextra main.c
g++ -c -o cpp.o -std=c++98 cpp.cpp
g++ -o main.out main.o cpp.o
./main.out
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Visual Studio Code(VSCode)配置C/C++开发环境,你需要安装必要的插件和设置合适的编译器工具链。以下是详细的步骤: 1. **安装C/C++插件**: - 安装`C/C++ Development Tools`插件,可以在VSCode的扩展商店搜索并安装 "ms-vscode.cpptools"。 2. **配置C/C++ Extension**: - 打开VSCode,点击左下角的扩展图标(齿轮),找到已安装的"C/C++ Development Tools",确保其处于启用状态。 - 在扩展详情页面,点击"Configure",这将打开一个新的窗口。 3. **设置系统路径**: - 在`settings.json`文件(或者使用`Ctrl + ,`快捷键打开),添加`"path"`字段,指定C编译器(如gcc或cl.exe)的路径。例如: ``` { "C_Cpp.intelliSenseEngine": "gcc-x64", "C_Cpp.default.compilerPath": "/usr/bin/g++" } ``` 将路径替换为你实际的编译器路径。 4. **设置编译配置**: - 在`tasks.json`文件配置构建任务,定义构建命令和参数。比如,对于Linux上的GCC,可能像这样: ``` { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++", "args": ["your_source.cpp", "-o", "your_executable"], "problemMatcher": ["$gcc"] } ] } ``` 根据你的项目需求修改源文件和目标文件名。 5. **设置调试配置**: - 如果你需要调试代码,还需要创建一个`launch.json`文件,配置启动程序的参数和断点行为。 6. **验证配置**: - 使用`C/C++: Compile Task`命令尝试编译一个简单的C/C++程序,如果能成功,说明配置基本正确。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值