c++可以跨平台了吗

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

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

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

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

6445 次点击
所在节点    问与答
45 条回复
easylee
2020-03-15 14:18:54 +08:00
楼主四个张口就来的“比如”引人不适,建议楼下的朋友 bolck !
PureWhiteWu
2020-03-15 14:26:08 +08:00
@easylee 同意,不想回复楼主了。
lcdtyph
2020-03-15 14:30:54 +08:00
@ybw

https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017
https://docs.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=vs-2019
可以看看两大主流编译器对 C++17 标准实现的情况。

https://docs.python.org/3/extending/extending.html
python 暴漏出来的虽然是面向对象的接口,如果直接用 C++会写的很爽吧,可惜人家没这么做,接口是 C 风格的面向对象。
msg7086
2020-03-15 15:01:52 +08:00
@zwy100e72 是的,我就是遇到了某个主流的库和生态基于 MSVC ABI,然后我二次开发的工具基于 GCC ABI 的情况。
因为也不可能让用这个工具的人把整个生态都换掉,所以最后我还是用 C 接口重写了。
zwy100e72
2020-03-15 17:01:25 +08:00
@msg7086 然而按照我的理解,GNU ABI 编译 C 也会有问题对吧
你实际上应该是需要用 MSVC 编译 + 边界部分用 C 接口,内部是可以使用 C++的。
(边界用 C 主要是因为 C++没有稳定 ABI )
zwy100e72
2020-03-15 17:02:57 +08:00
@lcdtyph python 用 C++扩展也需要用 C 包一层的,也是因为 C++没有稳定 ABI
jackmod
2020-03-15 17:21:23 +08:00
之前参与的一个项目是直接用跨平台的编译器,全平台 clang 一把梭……
yidinghe
2020-03-15 17:33:34 +08:00
反了,应该是 C++在各个平台实现统一的 API,然后其他语言再来调它的 API
lcdtyph
2020-03-15 17:51:48 +08:00
@zwy100e72 #26
嗯嗯我知道这个😁
我就是想回答楼主那几个“比如”
tyrantZhao
2020-03-15 18:07:30 +08:00
如果编译器都是一样的话,那没问题
ybw
2020-03-15 18:09:18 +08:00
@tyrantZhao 编译器不一样
ManjusakaL
2020-03-15 18:12:35 +08:00
@ybw 多了去,,取决于版本。。

举例,GCC 4.7 以下不支持 模板别名,GCC 4.8.1 不支持限定引用

再举个例子,Inter C++ 编译器到现在都没完全支持 C++17

IBM XLC++/Oracle C++ 等就更别说了。。
ybw
2020-03-15 18:16:21 +08:00
@ManjusakaL 7 年前的 gcc 不支持就算了。以 2020 年为起点计算。
kljsandjb
2020-03-15 20:38:01 +08:00
@easylee 回复完你这条就 block😄
zsh2401
2020-03-16 02:39:21 +08:00
比如??比如??🙃
ManjusakaL
2020-03-16 03:48:44 +08:00
@ybw 还是多了去,C++17 截至目前,都没被全量支持
msg7086
2020-03-16 04:34:28 +08:00
@zwy100e72 对,两个程序都是用 C++写的,就是边界的地方用 C 接口对接。
waruqi
2020-03-16 08:11:07 +08:00
系统 api 部分可以用一些跨平台库,比如 boost,tbox 就能解决,其他都还好,编译的话可以试试 xmake 来跨平台编译
pmispig
2020-03-16 09:43:25 +08:00
@cxh116 firefox 现在用 rust 啦
yokyj
2020-03-16 10:32:15 +08:00
比如?比如?

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

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

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

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

© 2021 V2EX