C++’s design philosophy Cpp 的设计哲学
The underlying design philosophy of C and C++ can be summed up as “trust the programmer” — which is both wonderful and dangerous. C++ is designed to allow the programmer a high degree of freedom to do what they want. However, this also means the language often won’t stop you from doing things that don’t make sense, because it will assume you’re doing so for some reason it doesn’t understand. There are quite a few pitfalls that new programmers are likely to fall into if caught unaware. This is one of the primary reasons why knowing what you shouldn’t do in C/C++ is almost as important as knowing what you should do.
C++ excels in situations where high performance and precise control over memory and other resources is needed.
intuitively,
1.cpp 的设计哲学简单来说”无脑信任 coder”; 因为是无脑信任程序员, 所以有好处有坏处
2.cpp 的优势就是自由度非常高, 你想做什么就能做什么, 知乎上有一个回答”满足男人的一切幻想”
3.cpp 的劣势和优势同源, 因为什么都能做, 所以 cpp 默认假设你做什么都是有道理的, 它不会阻止你做事, 即使你做的事情有问题; 所以很容易感觉要踩坑, 有非常多的坑
4.所以学 cpp 有个更高的要求, 别的语言只需要学”这么做是对的”, 就已经学完了; cpp 除了得明白道理上正确的做法, 也就是学”应该这么做”, 除此外还必须得学”那么做是不应该的”的原因
5.cpp 最牛逼的地方就是高性能, 并且能精准控制我们所需要的内存(或者其他资源)的使用
Compiling Source Code 编译源码
cpp compiler (编译器) 对项目中每个.cc (或者.cpp) 文件顺序进行 2 件事
1.检查并确认代码符合 cpp 语法. 如果不符合语法, 编译器给出对应行的报错提示, 帮我们修代码直到没有报错
2.将 cpp 源码翻译成机器语言文件, 叫做 object file (对象文件). object file 经常命名是 name.o 或者 name.obj, 其中 name 和 .cc 的名字一样
Linking object files and librarys 链接对象文件和库
编译器生成很多 object files 之后, linker (链接器) 出场做三件事
1.linker 以所有的object files作为输入, 将他们组装成一个可执行程序.
2.linker 链接library file (库文件) , 库文件是一些已经完成预编译的代码的集合, 这部分库文件是复用性高的代码; cpp 核心语言其实非常小, 但是 cpp standard libray 的功能很强大, 最常见的一个库就是 STL
3.linker 确保所有的跨文件的依赖关系都能正确解析. 比如一个 .cc 文件里面定义了某些内容, 然后在另一个 .cc 文件中使用它, linker会将两者连接在一起. 如果link有错, 那么链接过程会终止.
如果 linker 完成了所有 object files 和 librarys 的正确链接, 我们就得到一个可执行的文件
对于大型项目, 一般都用一个工具-makefile, 它描述如何构建程序的文件, 例如编译和链接哪些文件以何种方式进行处理
转载请注明来源, from goldandrabbit.github.io