Skip to content

本项目是对 C 和 C++ 的复习和持续学习

Notifications You must be signed in to change notification settings

pengyuwei/learning-c

Repository files navigation

learning-c

本项目是对 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++语言基础学习代码
  • autotools: 包含autoconf和automake的用法示例
  • lib:一些库
    • sdl: C++ SDL图形库
  • gui:图形界面技术
  • Linux:Linux系统特性(POSIX)
    • thread:进程、线程、协程、锁、互斥、信号量
    • curses:终端文本图形库
    • epoll
    • lock-free
    • 2038:32位Linux的2038年问题
  • FreeBSD:FreeBSD系统特性
    • kqueue
  • algorithm: 算法
  • 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

llvm

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 actions

使用github进行自动构建。配置文件为:

.github/workflows/c-cpp.yml

Reference

Book

Document

Article

Conference

About

本项目是对 C 和 C++ 的复习和持续学习

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published