1.中文输出乱码(只解决输出问题)

解决办法(二选一)
| #include <iostream> |
| #include "windows.h" |
| using namespace std; |
| |
| |
| |
| |
| |
| int main() { |
| SetConsoleOutputCP(CP_UTF8); |
| cout << "中国" << endl; |
| system("chcp 65001"); |
| return 0; |
| } |
CLion 中文输入/输出乱码解决办法
该方法不用 配置 system("chcp 65001") 和 windows.h SetConsoleOutputCP(CP_UTF8);
同时按着Shift+Ctrl+Alt+/

C/C++ 混合编程
C++调用C
- 使用extern "C" 当从C++调用C函数时,需要告诉C++编译器不要对函数名进行C++名称修饰(name mangling)。这是通过在函数声明前加上extern "C"来实现的。
| extern "C" { |
| void c_function(); |
| } |
- 头文件兼容性 如果C函数在头文件中声明,那么头文件应该包含extern "C"的条件声明,以便在C++环境中正确解析这些函数。
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| void c_function(); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
C调用C++
- 避免名称修饰 为了使C++函数能够被C代码调用,需要在函数声明和定义中使用extern "C"。
| extern "C" void cpp_function(); |
- 限制C++特性 被C代码调用的C++函数不能使用C++特有的语法,如命名空间、模板、重载等。
- 编译和链接
编译单元
- C源文件(.c)应使用C编译器(如gcc)编译。
- C++源文件(.cpp或.cc)应使用C++编译器(如g++)编译。
链接
将编译后的目标文件(.o文件)链接成最终的可执行文件或库。链接时,确保所有依赖的库都被正确链接。
| g++ -o my_program my_program.cpp my_c_library.o |
示例
假设你有一个C函数c_function和一个C++函数cpp_function,它们都需要在同一个项目中被调用。
c_function.h:
| |
| void c_function(); |
| |
| #include "c_function.h" |
| |
| void c_function() { |
| printf("Called from C\n"); |
| } |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| void cpp_function(); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #include "cpp_function.h" |
| |
| void cpp_function() { |
| std::cout << "Called from C++\n"; |
| } |
| |
| #include <iostream> |
| #include "c_function.h" |
| #include "cpp_function.h" |
| |
| int main() { |
| c_function(); |
| cpp_function(); |
| return 0; |
| } |
| gcc -c c_function.c |
| g++ -c cpp_function.cpp |
| g++ -o my_program main.cpp c_function.o cpp_function.o |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步