c++ 常见问题

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

image
解决办法(二选一)

#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+/
image

C/C++ 混合编程

C++调用C

  1. 使用extern "C" 当从C++调用C函数时,需要告诉C++编译器不要对函数名进行C++名称修饰(name mangling)。这是通过在函数声明前加上extern "C"来实现的。
extern "C" {
void c_function();
}
  1. 头文件兼容性 如果C函数在头文件中声明,那么头文件应该包含extern "C"的条件声明,以便在C++环境中正确解析这些函数。
#ifdef __cplusplus
extern "C" {
#endif
void c_function();
#ifdef __cplusplus
}
#endif

C调用C++

  1. 避免名称修饰 为了使C++函数能够被C代码调用,需要在函数声明和定义中使用extern "C"。
extern "C" void cpp_function();
  1. 限制C++特性 被C代码调用的C++函数不能使用C++特有的语法,如命名空间、模板、重载等。
  2. 编译和链接
    编译单元
  • 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
posted @   一个小笨蛋  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示