之前我一直在鼓捣前端的东西,最近想回归本质看点 C++和 Rust
其实原本就对 lib,dll 等有一些了解,c++语法也基本掌握。
但其实在使用的时候略有困惑,
我发现我找的书大多都之中阐释 C++语法和特性,模板啊,类啊什么的,但很少有书说一说 idea 怎么用的,动态链接库怎么链接的,如何配置,或者说 cmake 怎么用的,编译器的各个参数说明等等...
所以各位大神有没有什么针对性比较强的书籍可以推荐一下呢?🤕
其实我觉得 C 相关的历史包袱都挺重的,有一些不成文的规定,约定俗称的东西会对初学者造成障碍。
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 |
2
misaka19000 2020-06-07 18:17:17 +08:00 1
mit 好像最近刚开了一门课,专门就是讲这个的
|
3
misaka19000 2020-06-07 18:17:48 +08:00 2
|
4
liuser666 OP @misaka19000 非常感谢,我去看看
|
5
liuser666 OP @allAboutDbmss 我也知道可以去查文档...但是文档其实偏向于给已经会的人查缺补漏的,从学习的角度还是希望找更有侧重点的教程哈。
|
6
zhuangzhuang1988 2020-06-07 18:54:40 +08:00
<深入理解计算机系统>
看这个就可以了 至于配置啥的,看说明文档 |
7
liuser666 OP @zhuangzhuang1988 我感觉就像计算机网络和 Cisco 软件的关系一样,虽然题目我都能做出来,但是在 Cisco 里配置包括现实中配置的时候总有一些...心慌?可以用,但总感觉不是现行的最佳模式,还是希望看看真正实战,你们是怎么用的。
|
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/ |
9
liuser666 OP @nightwitch 原来如此,您的回答击中了我的一些痛点,有些时候代码没有问题但是配置总是不对,各种报错,我一开始以为是我学习方向出现问题了,还是非常感谢!
|
10
liuser666 OP @nightwitch 还有 gcc msvc clang 编译器之间的一些差异,这个支持这个特性,那个支持那个特性,语法也有差异,哎,难搞。
|
11
lifanxi 2020-06-07 20:34:02 +08:00 via Android 1
Linkers and loaders 可以看看。
还有俞甲子的《程序员的自身修养》。 |
12
natsji 2020-06-07 20:36:56 +08:00 via Android
|
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++标准。 |
16
liuser666 OP @nightwitch 学到了学到了,非常感谢。
|
17
fengjianxinghun 2020-06-07 22:18:47 +08:00
@nightwitch 经历过 gcc/clang/msvc Msbuild/Xcode project cmake/automake/autoconf make/ninja 之类的各种千奇百怪的玩意。
Rust 的 cargo 欢迎你 |
18
czdpzc 2020-06-07 22:40:34 +08:00
|
19
liuser666 OP @fengjianxinghun 确实觉得 rust 省心很多,但是 C 的历史包袱重带来的好处是大家几乎都有用 C,还是得懂 C 才能学 rust 。
|
20
oven 2020-06-07 23:34:53 +08:00 via Android
推荐 程序员的自我修养
|
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 就可以用起来了。 |
22
taogen 2020-06-08 09:29:01 +08:00 via Android
|
23
liuser666 OP @augustheart 输入法自动填充写成 idea 了...其实我想说的是 IDE (集成开发环境 hiahiahia )
|
24
liuser666 OP @augustheart 是这样,在调用 dll 库的时候很可能遇到一些问题,比如调用的 dll 库与编译器不兼容啊,需要额外的参数啊这样这样,小细节有点多...还有一般教材上都用的 gcc 所以我之前用的是 gcc,现在正在转换成 clang 。
|
25
augustheart 2020-06-08 10:24:19 +08:00 via Android
@liuser666 abi 兼容是不在规范里面的,所以跨编译器调用对 c++来说是不应该考虑的。不光是不同编译器,即使 clang 也并不保证你在不同版本的 clang 之间是能兼容的。这个也不独独是 c++的问题,别的语言多多少少有类似的东西。
|
26
MarkLeeyun 2020-06-08 14:11:54 +08:00
makefile 先学一下还是有必要的,多用 linux 写 c/c++
|