c++可以跨平台了吗

2020-03-15 10:20:13 +08:00
 ybw

2020 年 还有谁家的编译器和标准对着干?

如果没有,是不是我按照 c++的标准写代码,分清哪些是未定义行为,就可以保证跨平台了?

所有操作系统都支持 c++编程,这是 c++很有优势的地方。

6425 次点击
所在节点    问与答
45 条回复
BrettD
2020-03-15 10:23:00 +08:00
总是还会用到操作系统和平台相关的 API 啊
ybw
2020-03-15 10:26:17 +08:00
@BrettD 我的意思是这部分不可移植的用各个平台的最佳语言,剩下的用 c++,各种语言都能和 c++打交道。
tigerstudent
2020-03-15 11:16:52 +08:00
可以。
tulongtou
2020-03-15 11:19:22 +08:00
除去平台 API 部分的话问题不大
dacapoday
2020-03-15 11:38:39 +08:00
@ybw #2 准确的说,各种语言都能和 c 打交道。即使 c++,也要 extern C
ybw
2020-03-15 11:39:22 +08:00
@dacapoday 比如?
dacapoday
2020-03-15 11:58:23 +08:00
@ybw #6 这还要比如? 自己查查各语言的 FFI,哪个不是和 c 对接,即使和 c++对接,多半也是 extern C。
ybw
2020-03-15 12:00:55 +08:00
@dacapoday 要啊,比如?
msg7086
2020-03-15 12:20:59 +08:00
其实我没看懂你问的比如是比如什么。

C 几乎就是汇编往上最靠谱的语言了。C++别的不说,光各家编译器 ABI 都还没有互通。之前做开发,VC++出来的 dll 和 G++出来的程序一连就炸,最后老老实实滚回到 C 接口。

你如果要用 C++跨平台的话,如果能保证下面所有的依赖都由你用同一个编译器来编译的话,倒也还行。
ybw
2020-03-15 12:23:19 +08:00
@msg7086 源码级跨平台
msg7086
2020-03-15 12:31:07 +08:00
@ybw 用新标准的话还是要小心。很多新标准里的一些功能各家编译器不一定都实现。
比如 aligned allocation,Windows 平台下还是要用_aligned_malloc / _aligned_free,POSIX 下要用 aligned_alloc / free。
wentaoliang
2020-03-15 12:42:34 +08:00
如果你只写个 hello world 那肯定跨平台,难就难在项目日益庞大,你根本就兼顾不了。。。
ybw
2020-03-15 12:43:37 +08:00
@wentaoliang 比如? 谁家的编译器不遵守 c++标准的哪一条?
yngzij
2020-03-15 12:54:00 +08:00
windows 上直接使用 MinGw。
cxh116
2020-03-15 12:55:20 +08:00
可以的,chrome 和 firefox 就是这样干的,至于里面有多少坑你踩过就知道了.
ybw
2020-03-15 12:58:35 +08:00
@cxh116 Chrome 第一版发布于 2008 年,开发的时间更早,那个年代还是比较混乱的吧。
wanglufei
2020-03-15 12:58:42 +08:00
QT
zwy100e72
2020-03-15 13:34:29 +08:00
@msg7086 您这是遇到 ABI 不一致的问题了,需要区分 windows 下的 gnu abi 和 msvc abi

C++ 源码在不同的平台上用各自合适的工具链是可以跨平台的,相应的你需要每套平台都单独编译一次
同时 LLVM 当前支持跨语言的优化功能,你可以混用 LLVM 支持的各种语言,比如 Rust、C/C++
geelaw
2020-03-15 13:43:20 +08:00
没有人想和 C++ 标准对着干,但是似乎不存在完美实现标准的编译器。
ybw
2020-03-15 14:11:25 +08:00
@geelaw 比如?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/652918

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX