带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(1)

简介: 带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(1)

19条跨端cpp开发有效经验总结


image.png作者:鹿慕

image.png出品:大淘宝技术

 

 

跨多端开发避坑指南

 

前言

 

细想,专门从事跨多端开发已两年有余,前段时间因为组里跨桌面端项目需要回归windows下开发了整整2个月, 怎么形容这两个月呢,嘿嘿,各种“肆无忌惮”的写法,终于不用在写一行代码考虑后面n个端的行为了,"劳动力"、"效率"得到大幅度解放,但是随着windows发版结束后,我负责mac的适配相关工作,在这个阶段,发现很多不 "合规"的奇技淫巧(原定2个工作日的适配quota,大概进行了一周),作为一个略有想法的cpp程序员,遂产生了想写一个跨多端开发避坑指南的想法,想起过去看的Scott Meyers的《Effective C++》. 努力写"xx条有效使用

cpp开发跨端的经验",期望看完此文可以帮助大家在如何保持同一份cpp代码在多个平台编译和构建上行为一致上有一丝丝帮助。

 

跨多端开发下的复杂性,究其本质大多是因为两个原因引发的

  1. 多系统下平台差异
  2. 多编译器下行为不确定性

下面主要讲解的也将从这两个方面入手。

 

同时,在拜读了多份cpp程序员开发宝典里,还是觉得 Google  C++  Style  Guide是最有效的,最直接的避坑宝典,依旧推荐给大家:https://google.github.io/styleguide/cppguide.html

 

下面进入正文——

 

C++ VERSION 的选择

 

C++ version选择可以说对于跨终端开发是至关重要的,跨端开发一个比较难的点在于多平台下,如何很好的支撑平台差异点,随着C++版本的升级,越来越多的新feature在标准库中得到支持,这也就是意味着开发者可以更少的关注平台差异点,因此这里建议选择最新的稳定版本,截止到目前推荐使用C++17.

 

 

禁止在一个单独的编译中重复包含文件的现象出现

 

可以通过两种方式有效的避免此类情况

1.#pragma once,需要特别注意 这是一个非标准但是被广泛支持的前置处理符号,在主流的编译中clang,ms等均已支持。

#pragma once
#include<vector> 
...


 2.使用#define的方式

#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_


 

 

路径和头文件路径分隔符的问题

 

在windows中路径的识别对于正反斜杠均支持,但是在linux中,只能是/,此外,在linux中对于路径是严格区分大    小写的,对于windows则忽略大小写。

 

建议:                                    

1.对于路径均需严格保证大小写与实际路径的匹配

2.在代码中禁止对路径使用“\”,请用“/”代替。

 

此举,将在你从win到mac适配过程中,节省大量的工作量。

 

C标准库的头文件包含

 

在Windows下某些C标准库的头文件不用显式包含,但是在linux下需要显式包含。因此在跨端开发中,应在.c和. cpp文件中尽量包含这个文件中需要的头文件,并且这也是C语言标准从C99以后的标准要求。

 

 

带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(2)https://developer.aliyun.com/article/1340928?groupCode=taobaotech

相关文章
|
12月前
|
JavaScript Unix 编译器
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(2)
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(2)
|
12月前
|
设计模式 测试技术 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(1)
257 0
|
12月前
|
设计模式 搜索推荐 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
526 1
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(7)
|
12月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
436 0
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(3)
|
12月前
|
JSON 安全 编译器
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(4)
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(4)
|
12月前
|
编译器 Linux C++
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(3)
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(3)
|
12月前
|
设计模式 iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(6)
270 0
|
12月前
|
设计模式 API iOS开发
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
带你读《2022技术人的百宝黑皮书》——淘宝iOS扫一扫架构升级 - 设计模式的应用(2)
291 0
|
12月前
|
Unix Java 编译器
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(5)
带你读《2022技术人的百宝黑皮书》——19条跨端cpp开发有效经验总结(5)
|
12月前
|
运维
带你读《2022技术人的百宝黑皮书》——打造淘宝极简包的轻量化框架(6)
带你读《2022技术人的百宝黑皮书》——打造淘宝极简包的轻量化框架(6)