论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
C/C++跨平台SDK开发的注意事项
C/C++跨平台SDK开发的注意事项
王國慶
论坛元老
|
2025-3-1 20:57:50
|
显示全部楼层
|
阅读模式
楼主
主题
2017
|
帖子
2017
|
积分
6055
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
1. C/C++跨平台开发时有哪些值得注意的事项?
1.1. 你知道如何选择C++尺度的版本吗?
1.1.1. C++版本说明
1.1.2. 如何选择版本
1.1.3. 最佳实践
1.2. 源代码要如何保存,跨平台和跨IDE时才不会出现中文乱码?
1.2.1. 中文乱码题目与原因分析
1.2.2. 办理计谋
1.3. 如何优雅的隔离平台的差异?
1.3.1. 用宏界说隔离平台的差异
1.3.2. 最佳实践
1.4. 接口的参数和返回值可以是恣意数据类型吗?
1.4.1. 平台差异
1.4.2. 办理计谋
1.5. 如何优雅的实现跨平台的文件体系操纵?
1.5.1. 平台的差异
1.5.2. 办理的计谋
1.5.3. 路径操纵和文件体系的操纵
2. 待讨论的命题
开发跨平台SDK如同在多个操纵体系的夹缝中走钢丝:你需要同时讨好Linux的严谨、Windows的霸道、macOS的优雅,甚至嵌入式体系的固执。以下是历经实战后的经验沉淀,以及几个值得深思的命题。
1. C/C++跨平台开发时有哪些值得注意的事项?
1.1. 你知道如何选择C++尺度的版本吗?
1.1.1. C++版本说明
对于C++跨平台开发来说,选择一个合适的C++版本是最为紧张的一件事情。C++跨平台开发最紧张的难点之一是办理平台的差异性。C++不同的版本支持的特性不同,版本越新支持的特性越多,很多平台的差异可能在新的尺度版本里C++语言层面就帮我们办理了。比如:C++11的chrono模块提供了跨平台的时间处理相干的工具,C++17的filesystem模块提供了跨平台的文件体系相干操纵。
1.1.2. 如何选择版本
题目:
在实际项目开发中,C++版本的选择是越高越好吗?
解答:
答案肯定是否定的,要视情况而定。
基于编译器的考虑:
通常我们所说的C++版本,是指C++尺度委员会推出的C++大版本,如C++11/C++14/C++17/C++20/C++23等。而这些版本是要由C++编译器来支持的,C++编译器本身也是一个软件,是软件就可能有Bug。C++编译器对这些C++版本的支持也是在持续迭代优化的。
越新的C++版本由于支持的时间越短,因此存在Bug的可能性越大;而越老的版本由于编译器支持的时间更长,所以越稳定。
基于应用场景的考虑:
如果是应用层的项目,可以选择最新的C++版本。如果是SDK,SDK本身可能要支持更多的C++版本,建议选择低版本的C++。
1.1.3. 最佳实践
如果是开发新的应用层项目,建议选择较新的稳定版本的C++;结合实际情况,建议选择最新版本的前一到两个大版本,如如今(2025年02月)的最新版本是C++23,建议选择C++17或C++20。
如果是开发底层的SDK项目,SDK本身就希望能支持更多的C++版本,建议选择低版本的C++(如C++11),以覆盖尽可能多的用户。
如果是复杂的老项目:建议维持原有版本,非须要不做升级。
1.2. 源代码要如何保存,跨平台和跨IDE时才不会出现中文乱码?
1.2.1. 中文乱码题目与原因分析
C/C++跨平台开发时,通常需要在多个平台下开发、编译和调试,不同的平台可能会用不同的开发工具。如:
Windows: Visual Studio XXXX (XXX表示版本系列,如:2017、2019、2022)
Linux: Vim/VSCode + GCC编译器
macOS: Xcode
中文乱码的现象和原因:
不同平台编辑和查看代码时,你可能常常会碰到的一个题目是中文乱码(代码解释或常量字符串的中文乱码)。如:Windows下显示正常,Linux(macOS)下显示为乱码;或Linux(macOS)下显示正常,Windows下显示为乱码。
而乱码的本质是
文件编码方式不一致
:
Vim、VSCode、XCode保存的文件,默认编码是UTF-8(无BOM标记)。
Visual Studio XXXX系列保存的文件,Visual Studio 2022默认是UTF-8 BOM(带BOM标记),2022之前的版本是操纵体系的本地编码,中文环境下默认是GBK。
办理思路和方法:
所以,办理题目的思路就是:所有源码文件都同一使用相同的编码格式保存。所有的编辑器、编译器、IDE都要同一编码格式,如同一使用UTF-8编码。
1.2.2. 办理计谋
所有源码文件都以UTF-8 BOM的格式保存,恣意平台的恣意IDE都接纳相同的格式保存。
由于到现在为止(2025年02月),各个平台和IDE对UTF-8 BOM格式的支持都很好。
1.3. 如何优雅的隔离平台的差异?
1.3.1. 用宏界说隔离平台的差异
C++跨平台开发,最紧张的一件事情就是:抹平平台的差异。不同平台的体系调用接口、文件体系的目次布局等都有所差异,为了实现不同平台的无缝对接,需要对这些差异举行隔离,最常用的方法就是通过预界说宏来实现。
通常有两种方式来实现平台差异的隔离:
操纵体系预界说宏
,如_WIN32、__linux__。
编译器预界说宏
,如:_MSC_VER、__clang__。
操纵体系预界说宏的通用性比编译器预界说宏更好,通常会接纳此种方式。除非我们确实需要使用某个指定编译器的特性时,才使用编译器预界说宏。
1.3.2. 最佳实践
代码实现:
用宏界说隔离平台的差异,实现代码通常会写成如下如许:
[code]#if defined(_WIN32) std::cout
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
王國慶
论坛元老
这个人很懒什么都没写!
楼主热帖
webman
不想打开 IDE 的摆烂一天
Jupyter Notebook,太强大了
React技巧之发出http请求
【网络】https单向认证和双向认证 ...
【Shashlik.EventBus】.NET 事件总线, ...
APP内存管理
Apache DolphinScheduler 3.0.0 正式版 ...
Bluecmsv1.6-代码审计
java如何显示"html转义字符"对应的原始 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
鸿蒙
快速回复
返回顶部
返回列表