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 @ 2024-07-12 04:57  一个小笨蛋  阅读(32)  评论(0)    收藏  举报