c++ 常见问题
1.中文输出乱码(只解决输出问题)

解决办法(二选一)
#include <iostream>
#include "windows.h"
using namespace std;
// 方法1:
// 引入Windows.h
// 增加 SetConsoleOutputCP(CP_UTF8);
// 方法2:
// system("chcp 65001")
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:
// c_function.h
void c_function();
//c_function.c:
#include "c_function.h"
void c_function() {
printf("Called from C\n");
}
//cpp cpp_function.h:
#ifdef __cplusplus
extern "C" {
#endif
void cpp_function();
#ifdef __cplusplus
}
#endif
// cpp_function.cpp:
#include "cpp_function.h"
void cpp_function() {
std::cout << "Called from C++\n";
}
// main.cpp:
#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
本文来自博客园,作者:一个小笨蛋,转载请注明原文链接:https://www.cnblogs.com/paylove/p/18297454


浙公网安备 33010602011771号