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

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

  •  
  •   52coder · 2019-10-02 00:26:56 +08:00 · 10786 次点击
    这是一个创建于 1884 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    Tinyhttpd cJSON

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

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

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

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

    可以开发常用的服务。
    salamanderMH
        8
    salamanderMH  
       2019-10-02 10:14:05 +08:00 via Android
    STL 挺好的
    zjsxwc
        9
    zjsxwc  
       2019-10-02 11:01:37 +08:00 via Android
    52coder
        10
    52coder  
    OP
       2019-10-02 16:23:05 +08:00
    @zjsxwc 多谢这个 gear-lib 看着不错,每个库相对独立,多谢。
    rainmakeroly
        11
    rainmakeroly  
       2019-10-02 16:24:01 +08:00 via Android
    redis git 第一个版本的行数好像都不多。
    52coder
        12
    52coder  
    OP
       2019-10-02 16:28:30 +08:00
    @catror 多谢,hiredis 这个我看不错,哈哈。
    52coder
        13
    52coder  
    OP
       2019-10-02 16:29:14 +08:00
    @nevin47 我之前学 c 的时候看 github 上有个腾讯的大佬有个系列是一步一步写 json 解析器。收获不少。
    52coder
        14
    52coder  
    OP
       2019-10-02 16:30:08 +08:00
    @rainmakeroly redis 的一些资料之类的,相对,第一个版本比较少。
    rainmakeroly
        15
    rainmakeroly  
       2019-10-02 16:50:05 +08:00 via Android
    @52coder 先说下我没看过。但是 google code 是有 0.1 的版本代码的,除了测试 tcl 应该不超过 1 万行。官方的文档也很详细,一直想看但又不想碰 C
    blender2017
        16
    blender2017  
       2019-10-02 17:49:47 +08:00
    52coder
        17
    52coder  
    OP
       2019-10-02 19:29:47 +08:00
    @blender2017 是不是有点太难了,哈哈哈
    yadam
        18
    yadam  
       2019-10-02 21:15:45 +08:00
    推荐一个 seastar, 很飘逸
    52coder
        19
    52coder  
    OP
       2019-10-02 23:34:53 +08:00
    @yadam 多谢,我看下这是干啥的。
    cyhone
        20
    cyhone  
       2019-10-03 10:00:14 +08:00   ❤️ 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/进行阅读
    arloor
        21
    arloor  
       2019-10-03 11:28:25 +08:00 via iPad
    redis 源码好呀
    yushi17
        22
    yushi17  
       2019-10-03 19:02:29 +08:00 via Android
    tinyXML
    52coder
        23
    52coder  
    OP
       2019-10-05 11:33:21 +08:00
    @arloor 恩,确实,我之前学的时候看过一些,但量稍微有点大
    52coder
        24
    52coder  
    OP
       2019-10-05 11:34:12 +08:00
    @cyhone 多谢大佬,国庆刚浪回来,我先学习下。
    pursuer
        25
    pursuer  
       2019-10-05 11:52:12 +08:00
    有闲心可以看看 TinyCC,代码质量一般,应用场景比较有意思,我也希望这个项目能持续有人维护(或重构?)下去,原作者不再维护了,现在还有其他人在 https://repo.or.cz/tinycc.git 上更新
    sadhen
        26
    sadhen  
       2019-10-06 00:27:39 +08:00
    可以看看这个项目:

    https://github.com/texmacs/kernel

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