You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 3.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # CAPI: cpp
  2. ## 简介
  3. C++ 通信组件与选手接口
  4. ## 目标
  5. ### 基本目标
  6. - 基于 Protobuf 与 gRPC,为客户端提供 C++ 通信组件
  7. - 为选手提供游戏接口
  8. ### 重要目标
  9. - 理解 RPC 的工作原理,使用 gRPC 完善通信逻辑
  10. - 将通信逻辑与游戏逻辑分离开,便于日后复用
  11. - 客户端不对游戏人数、观战人数做出任何限制,这些方面全都由服务器决定
  12. - 改进选手接口,思考如何强制禁止选手一直占用 CPU 而导致 CPU 占用过大的问题。
  13. ### 提高目标
  14. - 提供其他语言的接口:Python、Java、Rust ......
  15. ## 统一约定
  16. - 主要使用现代 C++ 进行编程
  17. - 代码应当能够同时运行在 Windows 10 平台和 Linux 平台上。Windows 平台下采用 MSVC 作为编译工具,Linux 平台采用 GCC 作为编译工具
  18. - Windows 下的开发工具使用 Visual Studio 2019 或 Visual Studio 2022,语言标准采用 C++17 和 C17 (MSVC 编译选项 `/std:c++17; /std:c17`),并且应同时在 x64 平台的 Debug 与 Release 模式下正确编译并运行
  19. - Linux 下 C 语言编译工具使用 gcc,语言标准为 `-std=c17`;C++ 编译工具使用 g++,语言标准为 `-std=c++17`。优化选项为 `-O2`,生成 64 位程序 `-m64`,并编写相应的 Makefile
  20. ## 注意事项
  21. - 与逻辑组共同商议通信协议
  22. - Visual Studio 新建的 C++ 代码文件默认字符编码是 GB2312、默认缩进方式是 TAB,应该注意手动改成 UTF-8 和 空格缩进
  23. - 了解 Visual Studio 的项目属性配置,例如第三方库的链接、预定义宏等
  24. - 使用现代 C++ 特性进行编程,避免不安全的旧特性,例如:
  25. + 尽量避免裸指针,多使用智能指针
  26. + 禁止使用 `::operator new`、`::operator new[]`;使用 `std::make_unique`、`std::make_shared`、`std::vector` 等代替;
  27. + 禁止使用宏作为编译期常量;使用 `constexpr` 代替;
  28. + 善用 attribute,例如 `[[nodiscard]]`、`[[fallthrough]]`、`[[noreturn]]` 等;
  29. + C 语言接口需要基于 RAII 原则进行封装,通过对象的生命周期来关系资源的申请和释放;
  30. + ……
  31. - 了解 C、C++ 预处理、编译、链接的基本概念
  32. - 注意模块化、单元化,降低各个类、各个模块之间的耦合。特别注意避免相互依赖、环形依赖的问题
  33. - 遵循头文件(`.h`、`.hpp`)的编写规范
  34. + 杜绝头文件相互包含与环形包含
  35. + 头文件中最好同时写 `#pragma once` 以及保护宏,而 `cpp` 中不要写这两个东西
  36. + 头文件中**禁止** `using namespace std`!!!也不允许在任何自定义的名字空间中 `using namespace std`!!!
  37. + 头文件和 `cpp` 文件各司其职,代码写在改写的位置
  38. + 禁止 include .cpp 或 .c 文件
  39. - 避免忙等待,注意线程安全,做好线程同步
  40. - 善于使用 [Google](https://www.google.com/) 并使用[**英文**](https://en.wikipedia.org/wiki/American_English)搜索,善于查阅 [Microsoft Learn](https://learn.microsoft.com/)、[cppreference](https://en.cppreference.com/)、[StackOverflow](https://stackoverflow.com/) 以及第三方库官方文档等;不应轻信 [CSDN](https://www.csdn.net/) 等劣质博客社区以及[博客园](https://www.cnblogs.com/)、[简书](https://www.jianshu.com/)等质量参差不齐的博客社区,对其内容需全方位多角度仔细求证方可相信
  41. ## 开发人员
  42. - ......(自己加)