65 个回答
那你真是问对人了!
7 个 C 语言开源项目,7 个 C ++ 开源项目!
废话不多说,我就直接开始了!
一、C 项目
1.acwj(5.7k+ star)
教你写 C 语言编译器的实战教程。
教程注重实战循序渐进,一步步教你如何用 C 语言写一个可以自己编译自己(自举)、能够在真正的硬件上运行的 C 语言编译器。
传送门: https:// github.com/DoctorWkt/ac wj
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 语言写玩具或项目的教程集合。
教程分为游戏开发、操作系统、计算机网络等分类,其中包含图文、视频、代码等资料。
传送门: https:// github.com/rby90/projec t-based-tutorials-in-c
5.SimpleKernel(1.8k+ star)
一个用来练手的简单内核项目。
提供了各个阶段完成度不同的内核,可以选择从自己喜欢的地方开始。
传送门: https:// github.com/Simple-XX/Si mpleKernel
6.myscan(0.1k+ star)
开源的多线程 socket 扫描 IP 端口的程序。
目前仅支持 Windows 系统,代码简单可作为初学者学习项目。
传送门: https:// github.com/nobackdoor/m yscan
7.smartdns(4.1k+ star)
一个运行在本地的 DNS 服务器。能够提高网络访问速度等诸多妙用。
架构图如下:
传送门: https:// github.com/pymumu/smart dns
二、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)