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

各位有什么深入了解 C 语言的书嘛?

  •  1
     
  •   WilliamColton · 2023-11-07 10:54:03 +08:00 via Android · 3588 次点击
    这是一个创建于 389 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,最近发现对 C 语言的了解还不够深入,如函数传参顺序,局部变量和全局变量的赋值等,各位有什么好的书籍推荐么(可以和汇编结合起来讲),最近对这个挺感兴趣,同时也在学习汇编,所以劝我放弃之类的话就不用说了,毕竟是兴趣
    34 条回复    2023-11-08 18:23:25 +08:00
    yolee599
        1
    yolee599  
       2023-11-07 11:14:36 +08:00
    《 c primer plus 》,《 C 和指针》,《 C 专家编程》,《 C 陷阱和缺陷》
    Edwinxedwin
        2
    Edwinxedwin  
       2023-11-07 11:16:31 +08:00 via Android   ❤️ 1
    C 专家编程 -> CSAPP -> APUE -> 之后就根据工作需要学相关的
    yhm2046
        3
    yhm2046  
       2023-11-07 11:46:29 +08:00
    最經典那本 c 語言之父寫的《 C 程序設計編程語言》和樓上推薦的,有能力直接看英文版,然後把每本書最後列出的參考書目讀一遍,應該夠深入了
    thinkm
        4
    thinkm  
       2023-11-07 11:52:21 +08:00
    C 语言程序设计,第五版
    lovekernel
        5
    lovekernel  
       2023-11-07 11:54:09 +08:00
    @yhm2046 这位老哥是真大牛。直指本质。事实上 C 语言作者自己的《 C Programming Language, 2nd Edition 》就是最好的书了。把后面的 Appendix 看完,就能做到对 C 语言的理解准确而深入。
    NPC666
        6
    NPC666  
       2023-11-07 11:55:05 +08:00 via Android
    推荐 C 语言之父谭浩强的<C 语言程序设计>
    HkMuxxx
        7
    HkMuxxx  
       2023-11-07 11:58:39 +08:00
    谭浩强的书
    Nitroethane
        8
    Nitroethane  
       2023-11-07 12:10:57 +08:00   ❤️ 1
    C 语言的书不讲楼主提到的这些啊。要了解这些的话直接看《程序员的自我修养——链接、装载与库》,然后遇到书里讲得不清楚的直接查英文资料就行
    tool2d
        9
    tool2d  
       2023-11-07 12:14:27 +08:00
    去 github 上看高手的 C 代码,很多代码风格书上不一定讲到。

    对于码农,最靠谱的就是那句:stop bb, show me the code
    artnowben
        10
    artnowben  
       2023-11-07 12:38:44 +08:00
    深入了解 C 语言,需要能阅读一些优秀的 C 开源项目,从代码中学习
    1. linux kernel 的 list_head ,经典中的经典
    2. dperf 测试仪 https://dperf.org/ 10K 代码,适合新手读
    3. nginx
    timewarp
        11
    timewarp  
       2023-11-07 13:08:27 +08:00 via Android
    当然是《 redis 设计与实现》
    enchilada2020
        12
    enchilada2020  
       2023-11-07 13:10:16 +08:00 via Android
    不看 K&R 不足以谈 C 是我一直以来的一点小执念
    besto
        13
    besto  
       2023-11-07 13:18:49 +08:00
    一般书不可能汇编和 C 一起讲。
    谈汇编不谈架构就是耍流氓,gcc 汇编和 intel 汇编又不一样,这们问就只能当兴趣了...
    intel x86 汇编,看看 30 天写一个操作系统这种类型的书,基本就够用了,问题在于一半时间在处理 IO 或是 intel 分段机制,而且现在都是 x86-64 架构,完全用不上;
    arm v8 汇编,找个新一点的类似树梅派的开发板(甚至 QMUE 也行)足够了,也学一下从 0 开发 os 足够了,不过绕不开 ATF 那一套;
    如果不嫌弃,从 risc-v 玩起来倒也是不错的选择。
    cabing
        14
    cabing  
       2023-11-07 13:20:20 +08:00
    @tool2d 靠谱。c 的语法简单,需要工程实践中掌握相关的知识。比如调用各类系统 api ,操作系统和网络相关的知识。
    kita
        15
    kita  
       2023-11-07 13:40:39 +08:00
    k&r 足够了。谭浩强的破书错误很多,语法烂的一塌糊涂。
    汇编等会写之后直接看看反汇编内容再说
    wjx0912
        16
    wjx0912  
       2023-11-07 13:53:14 +08:00
    《程序员的自我修养——链接、装载与库》+1
    leonshaw
        17
    leonshaw  
       2023-11-07 13:56:45 +08:00
    有兴趣就把标准大概过一遍
    hanssx
        18
    hanssx  
       2023-11-07 13:58:58 +08:00
    我是先看的 c primer plus ,然后看的 k&r c ,k&r c 也没看完就结束了我的 c 语言学习生涯。。
    c 语言四大金刚和 1L 推荐的差不多,偶尔看过一些比如《 C 陷阱和缺陷》,里面讲的东西如果没有大量实践开发经验的话,直接看觉得会很生涩。
    从你描述上面看,你想走底层之路,这些 c 语言的书都没有写和汇编有关,稍微涉及一点点底层吧,比如 c primer plus 有个压栈顺序,你所说的传参顺序是依赖于不同架构的调用约定的,需要结合汇编和编译原理学习的话可以参考 13L 的,比如我看了王爽汇编主要讲的 16 位汇编,还挺有意思的。
    hanssx
        19
    hanssx  
       2023-11-07 14:00:53 +08:00
    补充一下,你要想结合 c 语言和汇编,可以去搞搞逆向、反病毒之类,国内当然是去 pediy 论坛了,其实 vc++本身就带有反汇编功能,可以对照着看。
    upupqi
        20
    upupqi  
       2023-11-07 15:16:10 +08:00
    @HkMuxxx #7 难绷 hh
    asm
        21
    asm  
       2023-11-07 16:47:43 +08:00
    《 C 语言程序设计 现代方法 第 2 版 》 一本足以,c 都到 c2x 了,那些还在推荐 c89 这种古董级的,何必呢,那些都是你们走过的路。
    再着,看你的那些问题,你看再多书也不会解惑,因为上面那些经典 c ,都是讲开发的,不会解释细节。
    最好的方法,就是找一些例子,编译后,使用 od 调试,再对着 ida 看。
    这类书不多,大部分都是关于逆向的,可以找找恶意代码的分析之类的,也就那么几章。
    rqzrqh
        22
    rqzrqh  
       2023-11-07 17:35:17 +08:00
    《 debughacks 》 《 binaryhacks 》 《计算机体系结构》
    多用 gdb 多跟踪调试调用过程,用工具观察用户态库的调用,用户态和内核态的变化。
    用 gdb 观察函数调用是怎么转化为汇编的。
    c 语法很简单,可能有一些底层的实现稍微偏门点,比如 printf 。
    cuihua
        23
    cuihua  
       2023-11-07 17:36:00 +08:00
    系统编程推荐《 Linux/Unix 系统编程手册》
    内功推荐 CSAPP 、程序员的自我修养
    seinefee
        24
    seinefee  
       2023-11-07 18:18:13 +08:00
    《 C 和指针》,英文名叫《 Pointers on C 》,作者是 Kenneth Reek
    把这本书吃透,时间充足的话最好看英文原版
    zzz22333
        25
    zzz22333  
       2023-11-07 18:20:45 +08:00
    嵌入式 C 的自我修养
    leang521
        26
    leang521  
       2023-11-07 20:33:41 +08:00 via Android
    如果想理解透 C 语言,还是的看编译原理,然后反过来拿汇编对照,你才能理解 C 语法为何这么设计
    aresyang
        28
    aresyang  
       2023-11-07 22:35:38 +08:00
    深入到都看不懂的地步如何,Formal C semantics: CompCert and the C standard https://xavierleroy.org/bibrefs/Krebbers-Leroy-Wiedijk-2014.html
    aresyang
        29
    aresyang  
       2023-11-07 22:40:08 +08:00
    @aresyang 细节在 Mechanized semantics for the Clight subset of the C language https://xavierleroy.org/bibrefs/Blazy-Leroy-Clight-09.html
    zorchp1
        30
    zorchp1  
       2023-11-08 00:00:32 +08:00 via Android
    我自己看的_c 程序设计,现代方法,微信读书就有,很成体系
    unnamedhao
        31
    unnamedhao  
       2023-11-08 06:39:52 +08:00 via iPhone
    网易有个斯坦福的视频,从 c 讲到汇编,可以摸摸耳朵,名字记不清了
    duke807
        32
    duke807  
       2023-11-08 09:54:10 +08:00
    建议找个 mcu ,stm32 或者 risc-v ,然后自己写一个简单的抢占式的调度器
    listenerri
        33
    listenerri  
       2023-11-08 14:30:33 +08:00
    既然楼主有一定 c 基础,那么我推荐看一下: https://c-faq-chn.sourceforge.net/ccfaq/index.html
    junmoxiao
        34
    junmoxiao  
       2023-11-08 18:23:25 +08:00
    学汇编是正途,接下来把 c 和汇编怎么对应的搞明白就 ok
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2191 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:21 · PVG 09:21 · LAX 17:21 · JFK 20:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.