本项目是对 C 和 C++ 的复习和持续学习。
千里之行始於足下
The journey of a thousand miles begins with a single step.
— 老子 (Lao Tsu) in Chapter 64 of 道德经 (Tao Te Ching)
- History:C语言发展简史,和相关的人物
- C: 使用gcc编译的C语言基础学习代码
- base:C语言基础(堆、栈、结构体)
- dynamic_link: 动态链接
- static_link: 静态链接
- scope: 变量作用域
- data_struct: 数组、链表、堆栈、队列、哈希表、排序、字节顺序、位运算
- io: 阻塞IO、异步IO和并发IO
- ipc: 进程间通讯(管道、共享内存、信号、消息队列、命名管道)
- socket: Socket通讯
- CPP: 使用g++编译的C++语言基础学习代码
- class:类(类、继承、重载、多态)
- dynamic_link: C++调用C的动态链接库
- static_link: C++静态链接C的导出库
- thread: C++多线程、多进程
- stl: C++ STL标准库
- whatsnew: C++语言新特性(v11-20)
- book: 读书笔记
- 《C++并发编程》: 《C++并发编程》读书笔记
- autotools: 包含autoconf和automake的用法示例
- lib:一些库
- sdl: C++ SDL图形库
- gui:图形界面技术
- Linux:Linux系统特性(POSIX)
- thread:进程、线程、协程、锁、互斥、信号量
- curses:终端文本图形库
- epoll
- lock-free
- 2038:32位Linux的2038年问题
- FreeBSD:FreeBSD系统特性
- kqueue
- algorithm: 算法
- leetcode: leetcode刷题
- happytime
- tunjinkaotang: “屯斤拷烫”这个梗的来源演示。
- basic:1990年的国际混乱C大赛上,Diomides Spinellis用1500字节实现的BASIC语言解释器。
- numhome:数字黑洞
Ubuntu Linux
apt-get install build-essential
macOS
brew install gcc
brew install g++
brew install gdb
FreeBSD
pkg install gcc
pkg install gdb
编译器版本
% gcc --version
Apple clang version 11.0.3 (clang-1103.0.32.62)
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
% c++ --version
Apple clang version 11.0.3 (clang-1103.0.32.62)
c++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
其他工具:
sudo apt install clang-tidy
# 内存泄漏检查
sudo apt install valgrind
valgrind --tool=memcheck -s ./a.out
如果需要在MacOS上使用gdb调试,参考这里 先打开启动台>>其他>>钥匙串访问>>证书助理>>创建证书 名称:gdb_codesign,类型:代码签名,覆盖默认值,证书位置为系统。创建后简介里选择始终信任。
sudo killall taskgated
codesign -fs gdb_codesign $(which gdb)
set startup-with-shell off
sudo chgrp procmod $(which gdb)
sudo chmod g+s $(which gdb) # else u must use sudo gdb a.out
# reboot
sudo gdb a.out
brew install llvm
clang test.c -o test
clang -O1 -emit-llvm test.c -c -o test.bc
lli test.bc
- Clang: 一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器
- llvm: Low Level Virtual Machine.先编译成中间代码,再编译为目标平台代码。
- doxygen: 文档生成工具,将程序中的特定注释转换成为文档
- ldd: 查看依赖的共享库列表
- clang-tidy: 基于clang的静态代码分析框架
- strace: 调试工具,监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等
- ghidra: 逆向工具
- ida pro: 逆向工具
Ubuntu Linux
ldd libso.so
clang-tidy -list-checks
macOS
查看依赖库:otool -L libso.so
查看so的导出函数:nm libso.so
查看运行时的系统调用:sudo dtruss df -h
使用github进行自动构建。配置文件为:
.github/workflows/c-cpp.yml
Book
- 《C程序设计语言》,K&R,机械工业出版社,维基百科
- 《C和指针》
- 《C专家编程》
- 《C陷阱与缺陷》
- 《UNIX环境高级编程》,人民邮电出版社,APUE
- 《C++编程思想》,机械工业出版社
- 《C语言编程常见问题解答》,清华大学出版社
- 《TCP/IP详解》,机械工业出版社
- 《The Elements of Programming Style》
Document
- GDB to LLDB command map
- std::deque
- automake
- C++ Standards Committee Papers
- Beej's Guide to Network Programming
- Autotools Tutorial
- kqueue
- Workflow syntax for GitHub Actions
Article
- 开源软件指南
- C/C++ 静态链接库(.a) 与 动态链接库(.so)
- Linux C/C++ 动态链接库的生成和调用
- C/C++ 的编译和链接的问题
- C调用C++编的DLL,C++调用C编写的DLL,extern “C”的用法
- "undefined reference to" 问题汇总及解决方法
- sockaddr和sockaddr_in详解
- Linux IO模式及 select、poll、epoll详解
Conference
- Cppcon :C++社区组织的年度聚会
- 2020 Pure C++大会:purecpp开源社区和腾讯主办的大会