19条跨端cpp开发有效经验总结
作者:鹿慕
出品:大淘宝技术
跨多端开发避坑指南
前言
细想,专门从事跨多端开发已两年有余,前段时间因为组里跨桌面端项目需要回归windows下开发了整整2个月, 怎么形容这两个月呢,嘿嘿,各种“肆无忌惮”的写法,终于不用在写一行代码考虑后面n个端的行为了,"劳动力"、"效率"得到大幅度解放,但是随着windows发版结束后,我负责mac的适配相关工作,在这个阶段,发现很多不 "合规"的奇技淫巧(原定2个工作日的适配quota,大概进行了一周),作为一个略有想法的cpp程序员,遂产生了想写一个跨多端开发避坑指南的想法,想起过去看的Scott Meyers的《Effective C++》. 努力写"xx条有效使用
cpp开发跨端的经验",期望看完此文可以帮助大家在如何保持同一份cpp代码在多个平台编译和构建上行为一致上有一丝丝帮助。
跨多端开发下的复杂性,究其本质大多是因为两个原因引发的
- 多系统下平台差异
- 多编译器下行为不确定性
下面主要讲解的也将从这两个方面入手。
同时,在拜读了多份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