何意味
我是
我是
人均100多美元??
港币也是$
人均86-129¥
在香港是不是算十分廉价
小馆子差不多都这个价
一道菜吃饱的那种50-70
吧里都不喜欢python,那有没有什么比python更好的把cpp输出的内容搬运进c当参数的办法?![]()
你要干什么
其实你可以用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)
↓ 把数据拿来当参数
那选择就不一样了。大概优先级是:
-
同进程:
extern "C"/ 静态库 / DLL
最推荐,最快,也最干净。 -
两个程序,但数据是流式的:pipe / stdin stdout
比 Python 中转合理很多:
cpp_program | c_program
C++:
std::cout << value << '\n';
C:
int value;
scanf("%d", &value);
Windows 下也可以用匿名管道 / Named Pipe。
-
两个长期运行的进程:socket
如果 C++ 和 C 都一直运行,而且不停交换数据,用 TCP / Unix Domain Socket / Windows Named Pipe。 -
超高频、大数据量:shared memory
C++ 直接写共享内存,C 直接读:
C++ process
↓
[ Shared Memory ]
↑
C process
这样甚至不需要序列化复制,适合大量数组、图像帧、游戏状态之类。
- 低频、图省事:文件 / 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和背稿的成本的前提下,一直低头干自己的事是否显得有点过于不尊重?
我是![]()
怎么说呢,这件事情…感觉是双向奔赴的,水课之所以叫水课…嗯… ![]()
