各位有什么深入了解 C 语言的书嘛? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WilliamColton
V2EX    C

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

  •  1
     
  •   WilliamColton 2023-11-07 10:54:03 +08:00 via Android 4450 次点击
    这是一个创建于 770 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,最近发现对 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 -> 之后就根据工作需要学相关的
    pq2Q3XZidsTF906J
        3
    pq2Q3XZidsTF906J  
       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 设计与实现》
    KMpAn8Obw1QhPoEP
        12
    KMpAn8Obw1QhPoEP  
       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 足够了。谭浩强的破书错误很多,语法烂的一塌糊涂。
    汇编等会写之后直接看看反汇编内容再说
    datadump
        16
    datadump  
       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     Solana     1066 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 18:16 PVG 02:16 LAX 10:16 JFK 13:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86