百分之零工程师

何意味

我是

我是

快来吃Asra

人均100多美元??

港币也是$

人均86-129¥

在香港是不是算十分廉价

小馆子差不多都这个价

一道菜吃饱的那种50-70

吧里都不喜欢python,那有没有什么比python更好的把cpp输出的内容搬运进c当参数的办法?:thinking:

你要干什么
其实你可以用freopen重定向输入输出,从控制台改成指定文件中(如txt)
比如在cpp里输出到CppOut.txt然后用C打开CppOut.txt

为什么不问问神奇的GPT呢

有,而且如果你的场景真的是 “C++ 里算出一个东西 → 交给 C 代码当函数参数”,那 Python 基本属于绕远路了。

最直接的办法是:让 C++ 暴露一个 C ABI 接口,用 extern "C",然后 C 直接调用。 C 和 C++ 本来就能非常自然地链接在一起。

比如 C++:

// bridge.cpp
extern "C" {

int cpp_calculate(int x) {
    return x * 2;
}

}

C:

// main.c
#include <stdio.h>

extern int cpp_calculate(int x);

int main() {
    int result = cpp_calculate(21);
    printf("%d\n", result);
    return 0;
}

然后一起编译链接就行。这个情况下根本不存在“搬运输出”——C++ 的返回值直接就是 C 的参数/变量,开销几乎可以忽略。

如果是复杂数据,也可以传 struct:

// api.h
#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    int id;
    float x;
    float y;
} Result;

Result cpp_get_result(void);

#ifdef __cplusplus
}
#endif

C++:

#include "api.h"

extern "C" Result cpp_get_result(void) {
    Result r;
    r.id = 114;
    r.x = 5.14f;
    r.y = 19.19f;
    return r;
}

C:

#include "api.h"

int main() {
    Result r = cpp_get_result();

    use_data(r.id, r.x, r.y);
}

如果你说的情况其实是 两个独立进程,比如:

xxx.exe (C++)
   ↓ 输出数据
yyy.exe (C)
   ↓ 把数据拿来当参数

那选择就不一样了。大概优先级是:

  1. 同进程:extern "C" / 静态库 / DLL
    最推荐,最快,也最干净。

  2. 两个程序,但数据是流式的:pipe / stdin stdout
    比 Python 中转合理很多:

cpp_program | c_program

C++:

std::cout << value << '\n';

C:

int value;
scanf("%d", &value);

Windows 下也可以用匿名管道 / Named Pipe。

  1. 两个长期运行的进程:socket
    如果 C++ 和 C 都一直运行,而且不停交换数据,用 TCP / Unix Domain Socket / Windows Named Pipe。

  2. 超高频、大数据量:shared memory
    C++ 直接写共享内存,C 直接读:

C++ process
    ↓
[ Shared Memory ]
    ↑
 C process

这样甚至不需要序列化复制,适合大量数组、图像帧、游戏状态之类。

  1. 低频、图省事:文件 / JSON
    C++ 写 JSON,C 读取 JSON。最简单,但性能最差之一。

所以如果你现在是类似:

C++
 ↓
stdout / 文件
 ↓
Python
 ↓
解析
 ↓
调用 C

完全可以砍掉 Python。

如果 C 和 C++ 本质上都是你自己的代码,我会直接改成:

C code
  ↓ function call
C ABI
  ↓
C++ implementation

也就是 把 C++ 编译成 .dll/.so 或 .lib/.a,通过 extern "C" 给 C 调。这是这类问题最标准的解法。

如果你把你现在那个 “CPP 输出 → Python → C 参数” 的实际代码/数据长什么样贴我一下,我可以直接告诉你应该换成 extern "C"、pipe 还是 shared memory。

主要是我不知道cpp会不会被烧录进单片机里,它不应该被烧进去

水课,全班无一人抬头,但老师仍然讲的挺起劲。为什么?这种对牛弹琴的工作有什么可值得老师白费劲?在老师至少付出了做ppt和背稿的成本的前提下,一直低头干自己的事是否显得有点过于不尊重?

我是:face_savoring_food:

怎么说呢,这件事情…感觉是双向奔赴的,水课之所以叫水课…嗯… :dotted_line_face: