(更新中...)
资料
- 网站:learncpp
https://www.learncpp.com/
语法
头文件
- ANSI C标准共定义了 15 个头文件,称为“C标准库”,所有的编译器都必须支持,依据使用频率分级:
初级:<stdio.h>、<ctype.h>、<stdlib.h>、<string.h>
中级:<assert.h>、<limits.h>、<stddef.h>、<time.h>
高级:<float.h>、<math.h>、<error.h>、<locale.h>、<setjmp.h>、<signal.h>、<stdarg.h>
构造函数
C++11版本之后,推荐使用大括号{}赋值构造函数,使用{}赋值的好处(advantages):
- 在大多数情况,都可以直接使用(Works in most contexts)
- 没有隐式构造(区别于使用 = 构造)
- 参考资料
C++ Braced Initialization
Brace initialization of user-defined types
二进制文件的读写
编译
资料
- GNU gcc官方文档:
https://gcc.gnu.org/onlinedocs/
编译器
参照百度百科的定义,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
在Linux下,通常使用GCC编译器,它包含 gcc和 g++(注意GCC与gcc是不同的东西)。gcc和g++在编译时,对编译选项的解释是不同的,会调用不同的过程去编译c和cpp文件
- gcc会将c和cpp分别按c语法和c++语法编译
- g++会将c和cpp文件统一使用c++语法编译并链接STL库,具体区别可以参见[linux公社 - gcc与g++ 详解]:
编译步骤
预处理(Preprocessing) -> 编译(Compilation) -> 汇编(Assemble) -> 链接(Linking)
- 预处理(Preprocessing)
- 编译(Compilation, call an actual compiler)
- 汇编(Assemble)
- 链接(Linking)
- 参考链接
https://www.cnblogs.com/CarpenterLee/p/5994681.html
https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html
链接库
静态库(static library)、动态库/共享库(shared library)
- 生成静态库libtest.a
ar rcs libtest.a test.o - 链接静态库libtest.a
gcc test_main.o -o test.exe -L./ -I./ -ltest
/usr/bin/ld搜索路径
静态库链接时搜索路径顺序
- ld会去找GCC命令中的参数-L
- gcc的环境变量LIBRARY_PATH
- 内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
动态链接时、执行时搜索路径顺序:
- 编译目标代码时指定的动态库搜索路径
- 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
- 配置文件/etc/ld.so.conf中指定的动态库搜索路径
- 默认的动态库搜索路径/lib
- 默认的动态库搜索路径/usr/lib
有关环境变量
- LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
参考资料:
编译选项
-fsanitize
检查内存泄漏、内存重复释放、悬垂指针等
CMake编译
调试
工具
- gdb
- 检查内存泄漏、测试性能等 - Valgrind(推荐)
https://www.valgrind.org/ - 检查内存泄漏的25款工具
https://www.cnblogs.com/findumars/p/5353538.html
-----------------------------------------------------------
本文来自博客园,作者:小厨房,转载请注明原文链接:https://www.cnblogs.com/erichf/p/13407978.html,否则视为侵权
如有疑问,请站内留言 或加 QQ:②⑨⓪②② ⑦③⑦⑨
-----------------------------------------------------------