有哪些好的github上c/c++学习项目?

大一新生打算学习c/c++想找好的方向来学习
关注者
2,551
被浏览
1,705,758

65 个回答

那你真是问对人了!

7 个 C 语言开源项目,7 个 C ++ 开源项目!

废话不多说,我就直接开始了!

一、C 项目

1.acwj(5.7k+ star)

教你写 C 语言编译器的实战教程。

教程注重实战循序渐进,一步步教你如何用 C 语言写一个可以自己编译自己(自举)、能够在真正的硬件上运行的 C 语言编译器。

传送门: github.com/DoctorWkt/ac

2.Tinyhttpd(7.3k+ star)

一个不到 500 行的超轻量型 HTTP Server,可以用来理解服务器程序的原理和本质。

C语言的入门级项目!

传送门: https://github.com/ EZLippi/Tiny

3.db_tutorial(5.9k+ star)

用 C 从零创建一个简单的数据库。

传送门: https://github.com/cstack/db_tu

4. project-based-tutorials-in-c (7.6k+ star)

用 C 语言写玩具或项目的教程集合。

教程分为游戏开发、操作系统、计算机网络等分类,其中包含图文、视频、代码等资料。

传送门: github.com/rby90/projec

5.SimpleKernel(1.8k+ star)

一个用来练手的简单内核项目。

提供了各个阶段完成度不同的内核,可以选择从自己喜欢的地方开始。

传送门: github.com/Simple-XX/Si

6.myscan(0.1k+ star)

开源的多线程 socket 扫描 IP 端口的程序。

目前仅支持 Windows 系统,代码简单可作为初学者学习项目。

传送门: github.com/nobackdoor/m

7.smartdns(4.1k+ star)

一个运行在本地的 DNS 服务器。能够提高网络访问速度等诸多妙用。

架构图如下:

传送门: github.com/pymumu/smart

二、C++ 项目

C++ 开源项目的推荐,我之前回答过类似的问题:

为了方便大家阅读,我把重要的内容再摘出来供大家看。

1.TinyWebServer(3.6k+ star)

Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.

  • 使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型
  • 使用 状态机 解析HTTP请求报文,支持解析 GET和POST 请求
  • 访问服务器数据库实现web端用户 注册、登录 功能,可以请求服务器 图片和视频文件
  • 实现 同步/异步日志系统 ,记录服务器运行状态
  • 经Webbench压力测试可以实现 上万的并发连接 数据交换
传送门: GitHub - qinguoyi/TinyWebServer: Linux下C++轻量级Web服务器

2.libqalculate(545 star)

使用 C++ 编写的多功能计算器桌面应用、库和 CLI 程序。

它易于使用功能强大,支持大型可定制函数库、单位计算和转换、符号计算(包括积分和方程)。

作为用户你可以直接在命令行中使用,作为开发者你也可以在自己的项目中使用这个库。官方还制作了 Qt GTK 两个版本的 GUI 计算器应用。

3.spdlog(12.7k+)

快速、上手简单的 C++ 日志库。示例代码:

#include "spdlog/spdlog.h"
int main() 
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
}

4.CPlusPlusThings(15.4k+star)

这是一个适合 C++ 初学者从入门到进阶的教程。

解决了面试者想要深入 C++ 及如何入坑 C++ 的问题。

除此之外,该仓库拓展了更加深入的语法分析、多线程并发等的知识,是一个比较全面的 C++ 从入门学习到进阶提升的项目。

5.indicators(1.7k+star)

一个使用 C++ 编写的进度条库,你可以用它在命令行中实现美观的进度条。它使用方便、线程安全、支持多种进度条样式。

6.sudoku(299 star)

C++ 实现的命令行数独游戏。600 余行代码,初学者也可以轻松学习。

7.dbg-macro(1.7k+)

打日志是 C++ 开发中必不可少的一种 debug 方式, dbg-macro rust-lang 中 的 dbg 启发,提供比 printf 和 std::cout 更好的宏函数。主要有如下特点:

  • 美观的彩色输出(当输出不是交互式终端时,颜色将自动禁用)
  • 兼容 C++11,并且是 header-only
  • 支持基础类型和 STL 容器类型的输出
  • 除了基本信息外,还输出变量名和类型
  • 启用 DBG MACRO DISABLE 生成 release 版
#include <vector>
#include <dbg.h>
// You can use "dbg(..)" in expressions:
int factorial(int n) {
  if (dbg(n <= 1)) {
    return dbg(1);
  } else {
    return dbg(n * factorial(n - 1));
int main() {
  std::string message = "hello";
  dbg(message);  // [example.cpp:15 (main)] message = "hello" (std::string)
  const int a = 2;
  const int b = dbg(3 * a) + 1;  // [example.cpp:18 (main)] 3 * a = 6 (int)