求 C++书籍推荐

2020-06-07 18:06:56 +08:00
 liuser666

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

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

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

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

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

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

3309 次点击
所在节点    程序员
26 条回复
allAboutDbmss
2020-06-07 18:13:21 +08:00
- 动态链接库怎么链接: 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
2020-06-07 18:17:17 +08:00
mit 好像最近刚开了一门课,专门就是讲这个的
misaka19000
2020-06-07 18:17:48 +08:00
liuser666
2020-06-07 18:33:29 +08:00
@misaka19000 非常感谢,我去看看
liuser666
2020-06-07 18:35:15 +08:00
@allAboutDbmss 我也知道可以去查文档...但是文档其实偏向于给已经会的人查缺补漏的,从学习的角度还是希望找更有侧重点的教程哈。
zhuangzhuang1988
2020-06-07 18:54:40 +08:00
<深入理解计算机系统>
看这个就可以了

至于配置啥的,看说明文档
liuser666
2020-06-07 19:05:41 +08:00
@zhuangzhuang1988 我感觉就像计算机网络和 Cisco 软件的关系一样,虽然题目我都能做出来,但是在 Cisco 里配置包括现实中配置的时候总有一些...心慌?可以用,但总感觉不是现行的最佳模式,还是希望看看真正实战,你们是怎么用的。
nightwitch
2020-06-07 19:53:40 +08:00
你碰到了 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
2020-06-07 20:08:06 +08:00
@nightwitch 原来如此,您的回答击中了我的一些痛点,有些时候代码没有问题但是配置总是不对,各种报错,我一开始以为是我学习方向出现问题了,还是非常感谢!
liuser666
2020-06-07 20:21:46 +08:00
@nightwitch 还有 gcc msvc clang 编译器之间的一些差异,这个支持这个特性,那个支持那个特性,语法也有差异,哎,难搞。
lifanxi
2020-06-07 20:34:02 +08:00
Linkers and loaders 可以看看。
还有俞甲子的《程序员的自身修养》。
natsji
2020-06-07 20:36:56 +08:00
liuser666
2020-06-07 20:37:38 +08:00
@natsji 哈哈哈哈
liuser666
2020-06-07 20:38:24 +08:00
@lifanxi 好的!
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
2020-06-07 21:46:34 +08:00
@nightwitch 学到了学到了,非常感谢。
fengjianxinghun
2020-06-07 22:18:47 +08:00
@nightwitch 经历过 gcc/clang/msvc Msbuild/Xcode project cmake/automake/autoconf make/ninja 之类的各种千奇百怪的玩意。

Rust 的 cargo 欢迎你
czdpzc
2020-06-07 22:40:34 +08:00
@nightwitch 说的好,全靠自己摸爬滚打😂 这里面可有太多弯路了
@misaka19000 有意思的课程,多谢分享
liuser666
2020-06-07 23:03:07 +08:00
@fengjianxinghun 确实觉得 rust 省心很多,但是 C 的历史包袱重带来的好处是大家几乎都有用 C,还是得懂 C 才能学 rust 。
oven
2020-06-07 23:34:53 +08:00
推荐 程序员的自我修养

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679462

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX