首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

C/C++短小 精悍 源代码学习推荐

  •  
  •   52coder · 42 天前 · 5144 次点击
    这是一个创建于 42 天前的主题,其中的信息可能已经有所发展或是发生改变。

    堂弟学计算机,大三了,有些 C 语言基础,毕业后想从事 C/C++方面的开发工作,问我有什么短小且经典的开源代码推荐给他,我这块不是很熟,有用过一些 redis 的,发现 redis 源代码可能有几万行的样子,不适合作为入门学习,请教各位大佬,有没有哪些 c/c++的经典开源代码,代码量越小越好,以便快速入门,增加自信心。

    我在 github 上找到几个,不知道有没有更好的选择。

    Tinyhttpd cJSON

    经典却不太适合的 lua redis nginx linux

    37 回复  |  直到 2019-10-08 10:11:34 +08:00
        1
    ZRS   42 天前
    STL ?
        2
    catror   42 天前 via Android
    C - boa, hiredis
    C++ - leveldb
        3
    nevin47   41 天前 via Android
    cJSON 可以,但是里面坑挺多,需要自己慢慢甄别。最好配合 commit 记录食用
        4
    rayhy   41 天前 via Android
        5
    bobuick   41 天前
    json 解析和序列化, 能写出来的话肯定会具有不错的计算机基础了。 听上去都不是什么高端算法和技术, 实际上去写就知道了,能优化的细节可以很多
        6
    inhzus   41 天前 via Android   ♥ 1
    最近在看 muduo,几千行的代码量,涉及到网络和多线程,我觉得如果能理解完还是会很有提升的
        7
    cabing   41 天前   ♥ 1
    单纯看源码没啥意义,因为你的练习太少。

    我觉得你应该是快速使用 cpp 做一些业务。然后看下框架源码啥的。

    当然是推荐一个简单的框架。https://github.com/weiboad/adbase

    可以开发常用的服务。
        8
    salamanderMH   41 天前 via Android
    STL 挺好的
        9
    zjsxwc   41 天前 via Android
        10
    52coder   41 天前
    @zjsxwc 多谢这个 gear-lib 看着不错,每个库相对独立,多谢。
        11
    rainmakeroly   41 天前 via Android
    redis git 第一个版本的行数好像都不多。
        12
    52coder   41 天前
    @catror 多谢,hiredis 这个我看不错,哈哈。
        13
    52coder   41 天前
    @nevin47 我之前学 c 的时候看 github 上有个腾讯的大佬有个系列是一步一步写 json 解析器。收获不少。
        14
    52coder   41 天前
    @rainmakeroly redis 的一些资料之类的,相对,第一个版本比较少。
        15
    rainmakeroly   41 天前 via Android
    @52coder 先说下我没看过。但是 google code 是有 0.1 的版本代码的,除了测试 tcl 应该不超过 1 万行。官方的文档也很详细,一直想看但又不想碰 C
        17
    52coder   41 天前
    @blender2017 是不是有点太难了,哈哈哈
        18
    yadam   41 天前
    推荐一个 seastar, 很飘逸
        19
    52coder   41 天前
    @yadam 多谢,我看下这是干啥的。
        20
    cyhone   40 天前   ♥ 1
    muduo、coroutine、libco 等,代码都不算太多。
    我也维护了一个我自己阅读这些代码做的注释版,地址在 https://github.com/chenyahui/AnnotatedCode 欢迎 star

    - coroutine 只有 200 多行,是云风大佬的作品,具备了一个有栈协程的基本功能。可以同时参考 http://www.cyhone.com/articles/analysis-of-cloudwu-coroutine/ 进行阅读
    - libco 只有几千行,是微信内部使用的协程库,实现了协程的自动切换等功能。
    - muduo 是陈硕大佬写的 tcp 网络库,具备了一个网络库的最佳实践,而且实际上也很优雅。可同时参考 http://www.cyhone.com/articles/analysis-of-muduo/进行阅读
        21
    arloor   40 天前 via iPad
    redis 源码好呀
        22
    yushi17   40 天前 via Android
    tinyXML
        23
    52coder   38 天前
    @arloor 恩,确实,我之前学的时候看过一些,但量稍微有点大
        24
    52coder   38 天前
    @cyhone 多谢大佬,国庆刚浪回来,我先学习下。
        25
    pursuer   38 天前
    有闲心可以看看 TinyCC,代码质量一般,应用场景比较有意思,我也希望这个项目能持续有人维护(或重构?)下去,原作者不再维护了,现在还有其他人在 https://repo.or.cz/tinycc.git 上更新
        26
    sadhen   38 天前
    可以看看这个项目:

    https://github.com/texmacs/kernel

    都是一些很基础的东西,基础的数据结构。比如 List/HashMap/String 等的实现。
        27
    crutin   38 天前 via iPhone
    C++写写 Qt 吧,实现一些简单计算器,音乐播放器等小项目。
        28
    printese   37 天前
    上面都是推荐上层纯应用方面的
    我来推荐一个嵌入式方面的,STM32 的官方的库,配合官方手册食用更佳
        29
    52coder   37 天前
    @sadhen 多谢,这个不错,适合表弟这种即将要找工作的人,夯实基础。
        30
    52coder   37 天前
    @crutin 多谢推荐,个人认为先让表弟整点 跟数据结构 算法相关的基础的东西,Qt 这个太局限。
        31
    52coder   37 天前
    @printese 这个也是一个方向,有点偏门了,哈哈哈
        32
    52coder   36 天前
    国庆后,整理发出来收集到的个人认为比较好的库。
        33
    qinyusen   36 天前
    C 和 C++虽然长得像,但是本质不是一个事儿,设计理念都不太一样。
    先明确一下到底是 C 还是 C++。
    简单说,要面向过程写代码(虽然也能强行面向对象,但是图个啥。。。)还是面向过程。
    或者说要去写嵌入式还是要去互联网公司写后台?
        34
    52coder   36 天前
    @qinyusen 先看看面向过程的 C,学习和理解面向过程的编程,后面再让他学习面向对象的 C++,如果开始就搞 c++,不利于夯实基础,大三马上大四找工作,我个人认为还是要搞搞基础,比如 c 实现 hashtable list 各种排序算法等,如果使用了 c++可能会直接用了 stl,不利于对基础的掌握。
        35
    qinyusen   36 天前
    @52coder 讲道理,如果这样,我其实更推荐先草草的学一下操作系统编译原理计算机体系结构之后,学完 C,直接学 JAVA,然后从 JAVA 过度到 C++。就是很多 JAVA 的语言特性,其实只要在 C++里人为的做一下映射就 OK 了,另外,讲道理啊,C++的开发工作,本科能做,但是天花板很容易被困住,语言的特性导致了,主要是算法和性能优先的一些任务需要使用 C++,绝大多数这类工作,都是有入职门槛的。。也就是其实是要偏算法一些。 与其这样,是不是 java 更好一些。CURD 理解 OOP,然后后台如果有高并发需求,转一下 go 和 C++,其实还是很快的。。。很多时候语言本身不是问题,而是背后的设计思想这些东西,比较需要时间来磨合。
        36
    52coder   36 天前
    @qinyusen 恩,操作系统编译原理等本科课程他学校有开设,我之前也推荐他学 JAVA,他就认准了一个方向 C/C++,所以我建议他先学 C 面向过程部分,这部分基本上也是 C++所必须要掌握的,扎实这部分基础,然后学 C++ 面向对象的一些特性。后面工作可以分两个方向,一个是基于 linux c 的系统编程,另一个就是面向对象的 c++。
        37
    Chenamy2017   35 天前
    cJSON
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1100 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 298ms · UTC 18:44 · PVG 02:44 · LAX 10:44 · JFK 13:44
    ♥ Do have faith in what you're doing.