求 C++书籍推荐 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
liuser666
V2EX    程序员

求 C++书籍推荐

  •  
  •   liuser666 2020-06-07 18:06:56 +08:00 3986 次点击
    这是一个创建于 2023 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前我一直在鼓捣前端的东西,最近想回归本质看点 C++和 Rust

    其实原本就对 lib,dll 等有一些了解,c++语法也基本掌握。

    但其实在使用的时候略有困惑,

    我发现我找的书大多都之中阐释 C++语法和特性,模板啊,类啊什么的,但很少有书说一说 idea 怎么用的,动态链接库怎么链接的,如何配置,或者说 cmake 怎么用的,编译器的各个参数说明等等...

    所以各位大神有没有什么针对性比较强的书籍可以推荐一下呢?

    其实我觉得 C 相关的历史包袱都挺重的,有一些不成文的规定,约定俗称的东西会对初学者造成障碍。

    26 条回复    2020-06-08 14:11:54 +08:00
    allAboutDbmss
        1
    allAboutDbmss  
       2020-06-07 18:13:21 +08:00   1
    - 动态链接库怎么链接: compiler linker
    - cmake 怎么用: 应该直接学 cmake 看文档吧
    - 编译器的各个参数: `> man gcc`

    你想学的基本和 c++无关,因为你关注的地方不是 c++和 c 的区别。书籍可以看纯理论的操作系统和体系结构的书,应该会有某个章节相关联(下面的课件链接中有书):

    推荐一个课的课件:
    - https://db.in.tum.de/teaching/ss19/c++praktikum/?lang=de
    - https://db.in.tum.de/teaching/ss20/c++praktikum/?lang=de
    misaka19000
        2
    misaka19000  
       2020-06-07 18:17:17 +08:00   1
    mit 好像最近刚开了一门课,专门就是讲这个的
    misaka19000
        3
    misaka19000  
       2020-06-07 18:17:48 +08:00   2
    liuser666
        4
    liuser666  
    OP
       2020-06-07 18:33:29 +08:00 via iPhone
    @misaka19000 非常感谢,我去看看
    liuser666
        5
    liuser666  
    OP
       2020-06-07 18:35:15 +08:00 via iPhone
    @allAboutDbmss 我也知道可以去查文档...但是文档其实偏向于给已经会的人查缺补漏的,从学习的角度还是希望找更有侧重点的教程哈。
    zhuangzhuang1988
        6
    zhuangzhuang1988  
       2020-06-07 18:54:40 +08:00
    <深入理解计算机系统>
    看这个就可以了

    至于配置啥的,看说明文档
    liuser666
        7
    liuser666  
    OP
       2020-06-07 19:05:41 +08:00 via iPhone
    @zhuangzhuang1988 我感觉就像计算机网络和 Cisco 软件的关系一样,虽然题目我都能做出来,但是在 Cisco 里配置包括现实中配置的时候总有一些...心慌?可以用,但总感觉不是现行的最佳模式,还是希望看看真正实战,你们是怎么用的。
    nightwitch
        8
    nightwitch  
       2020-06-07 19:53:40 +08:00   4
    你碰到了 C/C++最难的一部分,就是 C++的 ABI 问题和它的生态工具问题。绝大多数 C++教材都回避这一问题,或者简化的介绍一下 GCC 或者 MSVC,对为什么 gcc10.0 无法链接 gcc4.9 编译的库, 哪怕代码是合法的这种问题避而不谈。

    这一部分就是三不管地带,全靠码农在成千上万个 undefined symbol 和无数次的 segmentfault(core dumped)中淌过来的。

    cmake 相关的可以看,里面包含了如何链接动态链接库的问题
    https://llvm.org/docs/CMakePrimer.html
    https://cliutils.gitlab.io/modern-cmake/
    liuser666
        9
    liuser666  
    OP
       2020-06-07 20:08:06 +08:00 via iPhone
    @nightwitch 原来如此,您的回答击中了我的一些痛点,有些时候代码没有问题但是配置总是不对,各种报错,我一开始以为是我学习方向出现问题了,还是非常感谢!
    liuser666
        10
    liuser666  
    OP
       2020-06-07 20:21:46 +08:00 via iPhone
    @nightwitch 还有 gcc msvc clang 编译器之间的一些差异,这个支持这个特性,那个支持那个特性,语法也有差异,哎,难搞。
    lifanxi
        11
    lifanxi  
       2020-06-07 20:34:02 +08:00 via Android   1
    Linkers and loaders 可以看看。
    还有俞甲子的《程序员的自身修养》。
    natsji
        12
    natsji  
       2020-06-07 20:36:56 +08:00 via Android
    liuser666
        13
    liuser666  
    OP
       2020-06-07 20:37:38 +08:00 via iPhone
    @natsji 哈哈哈哈
    liuser666
        14
    liuser666  
    OP
       2020-06-07 20:38:24 +08:00 via iPhone
    @lifanxi 好的!
    nightwitch
        15
    nightwitch  
       2020-06-07 20:54:05 +08:00
    @liuser666 一般只提倡使用标准 ISOC++,只在自己知道哪些是编译器扩展的情况下使用编译器扩展,每个编译器都会掺自己的私货,所以要对编译器掺杂的私货要特别清楚。
    比如这段代码
    https://paste.ubuntu.com/p/YFt2NjzqYr/
    g++默认情况无条件给过并且不报 warning, 要开-Wpedantic 才会给 warning, clang 默认条件下直接报错误。
    这段代码不是标准的 C++代码,VLA 不属于 C++标准。
    liuser666
        16
    liuser666  
    OP
       2020-06-07 21:46:34 +08:00
    @nightwitch 学到了学到了,非常感谢。
    fengjianxinghun
        17
    fengjianxinghun  
       2020-06-07 22:18:47 +08:00
    @nightwitch 经历过 gcc/clang/msvc Msbuild/Xcode project cmake/automake/autoconf make/ninja 之类的各种千奇百怪的玩意。

    Rust 的 cargo 欢迎你
    czdpzc
        18
    czdpzc  
       2020-06-07 22:40:34 +08:00
    @nightwitch 说的好,全靠自己摸爬滚打 这里面可有太多弯路了
    @misaka19000 有意思的课程,多谢分享
    liuser666
        19
    liuser666  
    OP
       2020-06-07 23:03:07 +08:00
    @fengjianxinghun 确实觉得 rust 省心很多,但是 C 的历史包袱重带来的好处是大家几乎都有用 C,还是得懂 C 才能学 rust 。
    oven
        20
    oven  
       2020-06-07 23:34:53 +08:00 via Android
    推荐 程序员的自我修养
    augustheart
        21
    augustheart  
       2020-06-08 09:07:03 +08:00 via Android
    1.idea 不是用来写 c++的,那是写 JAVA 的。
    2.我猜你想说的是 ida,这部分内容不属于 c++,请参阅 ida 说明文档
    3.动态链接库的知识属于操作系统范畴,依然不属于 c++。你要查阅 pe 格式文档以及 windows 载入器部分的知识。
    4.动态链接库没有配置的问题。
    5.cmake 参阅 cmake 官方文档,挺详细的,虽然嗦复杂,但是语法很简单,就是很简单的 ifelse 和一些系统环境变量以及 cmake 变量。
    6. 编译器各个参数说明,gcc 是有很详细的说明的,cl 的话用 cl /?能看到。不复杂,大部分望文生义,至少是比 gcc 那套简洁多了。
    7 你说的所有内容都不属于 c++的范畴上,正如 idea 不是 java 的内容一样。充其量是胡须与吉列剃须刀的关系,也不像某贴说的是最难的内容。相反,这些内容都是很直白的 1+1=2,都有具体的资料(即使是不在 c++规范中的 abi 定义),相比起费脑的算法题,这些死记硬背就可以了。问题在于这部分内容多且繁,基本上不会有几个人会把它完整地学习,就好像我刮胡子不需要了解怎么造某个特定的剃须刀一样,用 gcc 的人没必要了解它在所有平台下面的特定指令。大部分人了解了-o 和-O 就可以用起来了。
    liuser666
        23
    liuser666  
    OP
       2020-06-08 09:51:02 +08:00
    @augustheart 输入法自动填充写成 idea 了...其实我想说的是 IDE (集成开发环境 hiahiahia )
    liuser666
        24
    liuser666  
    OP
       2020-06-08 09:57:36 +08:00
    @augustheart 是这样,在调用 dll 库的时候很可能遇到一些问题,比如调用的 dll 库与编译器不兼容啊,需要额外的参数啊这样这样,小细节有点多...还有一般教材上都用的 gcc 所以我之前用的是 gcc,现在正在转换成 clang 。
    augustheart
        25
    augustheart  
       2020-06-08 10:24:19 +08:00 via Android
    @liuser666 abi 兼容是不在规范里面的,所以跨编译器调用对 c++来说是不应该考虑的。不光是不同编译器,即使 clang 也并不保证你在不同版本的 clang 之间是能兼容的。这个也不独独是 c++的问题,别的语言多多少少有类似的东西。
    MarkLeeyun
        26
    MarkLeeyun  
       2020-06-08 14:11:54 +08:00
    makefile 先学一下还是有必要的,多用 linux 写 c/c++
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2504 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:59 PVG 18:59 LAX 02:59 JFK 05:59
    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