小编是一个有着6年工作经验的工程师,关于C++编程,自己有做材料的整合,一个完整的C++编程学习路线,学习资料和工具,能够进我的群10048,-83029收取,免费送给大家,希望你也能凭着自己的努力,成为下一个优秀的程序员
学习,参考和指南
下面列出了学习 C 编程的资源,或者跟 C 编程相关的有用的东西。
参考
SEI CERT C 编码标准
C FAQ – comp.lang.c 常见问题
GNU/Linux 下 C/POSIX 标准库实现的比较
C11 标准草案
GNU C 参考手册
Robert Pike 的 C 笔记
初级
指针教程
C 语言指针 5 分钟教程
C 语言内存地址基础
C 语言函数指针基础
C 语言指针和数组基础
构建 C 项目
C 编程百科全书
“有趣”的 C 介绍
用 GDB 学习 C
POSIX 线程编程指南 (有点过时,但大部分还是有效和有用的)
GNU C 编程指南 (在线 PDF)
C 语言中的模板
中级
8 个你应该知道的 GDB 技巧
10 个 C99 技巧
深入并发:尝试互斥锁和原子操作
OpenMP 介绍 (视频)
OpenMP 指南 (针对 OpenMP3 标准)
memcpy 与 memmove 的比较
MPI 指南
C 语言中一些未知特性或者技巧
失落的C语言结构体封装艺术
C 程序员需要了解的内存知识
每个 C 程序员需要知道的未定义行为知识
高级
C 中的高级元编程
一个快速教程:如何实现和调试 malloc,free,calloc,和 realloc
位操作技巧
我不懂 C
在 C 语言中实现智能指针
C 中的内联函数
C 中的自定义控制结构元编程
用 C 的宏解决临时内存问题
C 语言中一些不为人知的角落
编写高效的 C 和 C 代码优化
自学教程
C 语言认证协会预备课程
实体书
参考资料
C: A Reference Manual 5E – C99 完全参考手册
C Pocket Reference – C99 简明参考手册
The C Programming Language 2E – 第一本 C 语言书籍,由 C 的创造者编写。
初级
C Primer Plus 6E – 一个全面的 C11 编程指南。
C Programming: A Modern Approach – 一本极好的学习 C 基础的书。
Head First C – 一本“深入浅出”风格的学习 C 的书籍。
中级
21st Century C – 一本非常好的 C 语言书籍,可作为第二选择。
Understanding and Using C Pointers – 一本深入讨论 C 指针的书。
ZeroMQ – 一本介绍如何用 C 使用 ZeroMQ 的书。
高级
Expert C Programming: Deep C Secrets – 一本从有趣,深度和娱乐的视角分析 C 内部结构的书籍。
多媒体
FFMPEG – 一个完整,跨平台的录音,转换和流化视频以及音频的解决方案。GNU LGPL2.1 或更高版本,部分是 GNU GPL2.1 或更高版本。
GStreamer – 一个声音和可视化媒体的框架。GNU LGPL2.1。
lodepng – 一个简单的 PNG 图像解码器和编码器,不需要其他依赖。3-clause BSD.
网络
asnlc – 一个把 ASN.1 规范转换为 C 代码的编译器。FreeBSD。
czmq – 一个 ZeroMQ 的高级绑定。
GNU adns – 一个高级,易用,异步的 DNS 客户端和实用工具。GNU GPL3 及更高版本。
GNU SASL – 一个简单身份认证和安全层和一些常见 SASL 机制的实现。GNU GPL3 及更高版本。
GnuTLS – 一个安全通信库,实现了 SSL,TLS 和 DTLS。GNU LGPL2.1 及更高版本。
gumbo-parser – 一个 C99 标准的 HTML5 解析库。Apache2.0。
http-parser – 一个 HTTP 请求回应解析器。Expat。
ldns – 一个简化 DNS 编程的库。3-clause BSD。
libcurl – 一个客户端的 URL 转换库,支持多种格式。curl license。
LibEtPan – 一个邮件库,支持 IMAP,SMTP,POP 和 NNTP 网络协议。3-clause BSD。
libev – 一个事件驱动库。FreeBSD.
libevent – 一个在网络服务器中事件驱动库的可替代品。3-clause BSD。
libgss – 通用安全服务。GNU GPL3 或更高版本。
libhttpd – 一个给应用或嵌入式设备添加基本 Web 服务器功能的库。GNU GPL2。
libidn – Stringprep,Punycode 和 IDNA 规范的实现。GNU GPL3 或更高版本。
libmicrohttpd – 一个迷你库,可作为其他应用的一部分,让运行 HTTP 服务器变得简单。GNU LGPL2.1 或更高版本。
libsoup – 一个 GNOME HTTP 客户端/服务器库,使用了 GObject。GNU LGPL2.1。
lwan – 一个实验性,可扩展,高性能的 HTTP 服务器。 GNU GPL2.1。
mongoose – 基于 C 的嵌入式 Web 服务器。GNU GPL2.1。
nanomsg – 一个基于 C 的 ZeroMQ 实现。Expat。
onion – 易于使用的 HTTP 服务器库。Apache2.0。
OpenSSL – 一个 SSL 和 TLS 协议的实现,还包括一个加密库。Dual Licensed under the OpenSSL License and the SSLeay License。
oSip – 一个基于 C 的 SIO 实现,没有额外的依赖。GNU LGPLv2.1 或更高版本。
s2n – 一个 C99 标准的 TLS/SSL 协议的实现,简单,快并且以安全优先。Apache2.0。
socket99 – BSD 套接字 API 的 C99 封装。ISC。
Tox – 一个通信平台,被设计为 Skype 杀手。GNU GPL3。
twitc – 一个与 Twitter OAuth API 交互的迷你 C 库。Expat。
网络框架
balde – 一个基于 GLib 的 C 微框架。 GNU LGPLv2.1。
数值计算
apophenia – 一个用于统计和科学计算的库。GNU GPL2.1。
ATLAS – 自动调谐线性代数软件。 3-clause BSD。
BLAS – Basic Linear Algebra Subprograms;提供向量和矩阵操作的一系列操作。BLAS license。
Cuba – 一个计算多维的数值积分的库。 GNU LGPLv3。
FFTW – The Fastest Fourier Transform in the West;一个高度优化的快速傅立叶变换例程。GNU GPL2.1 或更高版本。
FLINT – Fast Library for Number Theory;一个支持算数,多项式,幂级数和矩阵等。GNU GPL2.1 或更高版本。
GLPK – GNU Linear Programming Kit;一个求解大规模线性规划,混合整数规划和其他相关问题。GNU GPL3 或更高版本。
GMP – GNU Multple Precision Arithmetic Library;一个支持任意精度计算的库。双重许可 GNU GPL2.1 和 GNU LGPLv3。
GNU MPC – 一个支持复杂数字计算的库。GNU LGPL3 或更高版本。
GNU MPFR – 一个支持任意精度的浮点数计算库。GNU LGPL3 或更高版本(大多数最近版本),GNU LGPL2.1 或更高版本(2.4.x 之前)。
GNU MPRIA – 一个支持多精度合理区间运算的可扩展数学库。GNU GPL3 或更高版本。
GSL – The GNU Scientific Library;一个精确的数值计算库。GNU GPL3。
KISS FFT – 一个非常快的傅里叶变换库。3-clause BSD。
LAPACKE – 一个 LAPACK 的 C 接口。3-clause BSD。
PARI/GP – 一个数论的计算机代数系统,包括 C 编译器。GNU GPL2.1 或更高版本。
PETSc – 一系列数据结构和例程,用于计算由偏微分方程建模的应用程序的可扩展并行解。FreeBSD。
SLEPc – 一个在并行计算机中的解决大型,稀疏特征值问题的软件库。GNU LGPL3
Yeppp! – 非常快,SIMD 优化的数学库。 3-clause BSD。
并行编程
cchan – 一个线程间通信通道构建的小型库。公共领域。
ck – 并发原语,安全内存回收机制和非阻塞数据结构。FreeBSD。
mill – 用 C 写成的 Go 风格并发。X11
MPICH – MPI 的另一种实现。MPICH licence。
OpenMP – 一组 C 编译指令,使其易于并行化代码。标准(许可不适用)。
OpenMPI – 一个消息传输接口实现。3-clause BSD。
PETSc – 一系列数据结构和例程,用于计算由偏微分方程建模的应用程序的可扩展并行解。FreeBSD。
pth – 一个非抢占式优先级调度多线程执行的可扩展实现。GNU GPL3 或者更高版本。
pthreads – POSIX 线程库。标准(没有适用的许可)。
SLEPc – 一个在并行计算机中的解决大型,稀疏特征值问题的软件库。GNU LGPL3。
TinyCThread – 一个可扩展,小型的 C11 标准线程 API 实现。zlib。
正则表达式
有些人遇到问题时就会想:“啊,我知道了,我可以使用正则表达式”。于是现在他们有了两个问题。- Jamie Zawinski。
PCRE – 与 Perl 5 正则表达式完全相同的实现。3-clause BSD。
SLRE – Super Light Regular Expression library;一个 Perl 正则表达式语法子集的迷你实现。GNU GPL2.1。
TRE – 一个与 POSIX 一致,充满特色的正则表达式库。FreeBSD。
序列化
c-capnproto – 一个 Cap’n Proto 序列化协议的实现。 Expat。
cmp – 一个 MessagePack 序列化协议的实现。 Expat。
libavro – 一个 Avro 数据序列化系统的 C 实现。Apache2.0。
mpack – 另一个 MessagePack 序列化协议的实现。Expat。
protobuf-c – 一个 Google Protocol Buffer 的 C 实现。FreeBSD。
xdr – External Data Representation;数据序列化标准。标准(没有可用许可)。
源码集锦
下面包含了一些小型源码集合。如果你想要大型且成熟的,看《框架》那一节。
CCAN – 模仿 Perl 的 CPAN,这是一个大的实用 C 代码集合。完整的列表在 这里。多种许可(所有都是免费软件)。
clib – 一个 C 软件包管理器,配备了一堆自己的库。 Expat。
gnulib – 通用 GNU 代码的集合。多种许可证,全部免费。
libdjb – 做各种事情的库的集合。(显然)公共领域。
标准库
下面包括了标准 C 库。
Bionic – 谷歌为 Android 开发的 C 标准库。3-clause BSD。
dietlibc – 标准 C 库,可能是最小的二进制文件。GNU GPL2.1。
glibc – GNU C 库。一个 C 标准库的实现。 GNU LGPL2.1。
musl – 标准 C 库,兼容 POSIX 2008 和 C11,为静态链接设计。Expat。
字符串处理
bstrlib – 更好的字符串处理库。双重许可,3-clause BSD 或 GNU GPL2.1。
ICU – International Components for Unicode;提供 Unicode 支持的库。 ICU license。
libunistring – 处理 Unicode 字符串的 C 库。GNU LGPL3。
libgiconv – 文本转换库。GNU LGPL2.1(库),GNU GPL3(编码转换程序)。
SDS – Simple Dynamic Strings;一个用简单方式处理 C 字符串的库,而且兼容标准 C 字符串函数。可通过 clib 使用。FreeBSD。
shoco – 一个小型文本压缩器。Expat。
smaz – 一个高效的字符串压缩库。3-clause BSD.
测试
CHEAT – 一个非常简单的单元测试框架。FreeBSD。
Check – 一个 C 的单元测试框架。GNU LGPL2.1。
CMock – 一个 C 的 mock/stub 生成器。
cmocka – 一个支持 mock 对象的单元测试框架。Apache2.0。
Criterion – 一个 KISS 风格,非侵入式的 C 测试框架。 Expat
CUnit – 另一个 C 的单元测试框架。GNU LGPL2.0。
minunit – 极小的 C 单元测试框架。Expat。
Unity – 一个简单的 C 单元测试框架。 Expat。
文本编辑器扩展
在几乎任何像样的程序员文本编辑器支持C之际,有一些扩展,让编辑器更加令人愉快。下面是根据编辑器分目录的。
Emacs
CEDET – Collection of Emacs Development Environment Tools;给 Emacs 提供一种类似 IDE 的特点,是内建的。GNU GPL3 或更高版本。
Flycheck – 现代语法检查。对于 C,它可以使用 GCC 或者 Clang 作为后端。GNU GPL3 或更高版本。
Yasnippet – 一个模板系统,支持 C 的通用代码片段。GNU GPL3 或更高版本。
Vim
Syntastic – 语法检查和语言分析。Do What The Fuck You Want To license。
YouCompleteMe – 一个 Vim 的代码补全引擎。GNU GPL3。
工具
下面是实用的程序列表,包括了帮助你编写和调试 C 代码的库或者编译器,不包括编辑器。
adlint – 一个静态分析器。支持完全的 C89 标准和部分 C99 标准。GNU GPL3 或更高版本。
Artistic Style – 一个支持 C 的小而快的自动化代码格式化工具。GNU LGPL3。
address-sanitizer – 一个很快的内存错误探测器。Apache2.0。
biicode – 一个现代的 C 依赖管理器。Expat。
c – 在命令行中编译和执行 C 脚本,也支持 shebang。 Expat。
c99sh – 用 hash-bang 运行 C 文件。FreeBSD。
CBMC – C Bounded Model Checker;一个检查数组边界,指针安全和用户自定义断言的工具。Original BSD。
cdecl – 一个在线服务,能够把 C 的声明翻译成英文,反向也可以。公共领域。
cinclude2dot – 在 C 项目中使用 Graphviz 的图像包含依赖。任意的 GNU GPL 版本(根据文件中的要求)
Complexity – 一个测量 C 代码复杂性的工具。GNU GPL3 或更高版本。
DDD – 各种命令行调试器的图形前端。GNU GPL3 或更高版本。
fab – 让每次构建都最优的构建系统。GNU GPL3。
GDB – The GNU Project debugger;一个 C 调试器。GNU GPL3 或更高版本。
Glade – 一个让 TK+ GUIs 开发更快的 RAD 工具。GNU GPL2.1。
GMSL – GNU Make Standard Library;一个 GNU Make 额外功能的集合。3-clause BSD。
GNU Global – 一个 C 的源码标签工具。GNU GPL3。
gprof – 一个性能分析工具。GNU binutils 的一部分。GNU GPL3 或更高版本。
Highlight – 把源码转化为高亮的格式化文本。GNU GPL3。
include-what-you-use – 帮助程序员发现不必要的包含和提供解决他们的建议。基于 LLVM/Clang(只能与它一起工作)。NCSA。
indent – 自动格式化 C 代码,让它更容易阅读。也能把一种风格的代码转化为另一种。GNU GPL3 或更高版本。
Make – 一个控制程序的可执行和其他非代码文件的生成的工具。GNU GPL3 或更高版本(链接到 GNU 的实现)。
qo – 无需分开的配置文件的构建系统。Expat。
rr – 记录非确定执行来允许可确定调试的调试器。FreeBSD。
tup – 一个很快,基于文件,跨平台的构建系统。GNU GPL2.1。
unifdef – 移除 #ifdef 和 #if 指令包含的文本,不会改变文件的其他部分。3-clause BSD 和 FreeBSD。
Valgrind – 各种动态分析工具,包括一个内存泄漏检测工具。GNU GPL2.1。
实用工具
下面是包罗万象的目录,主要是那些不适合放在其他目录的东西。
ApeTagLibs – APEv2 标签的 C 库。Expat。
bfd – 处理二进制对象文件的库。GNU binutils 的一部分。GNU GPL3 或更高版本。
ccv – C-based/Cached/Core Computer Vision library;现代计算机视觉。 3-clause BSD。
cf4ocl – The C Framework for OpenCL;一个跨平台面向对象框架,用于开发和用基准问题测试 OpenCL 项目。GNU LGPL3(库), GNU GPL3(其他代码)。
CommonMark – CommonMark 规范的 C 实现。Variety of licenses, all free。
CException – 异常的 C 实现。Expat。
docopt.c – 命令行选项解析器的 C 实现。Expat。
dyncall – 另一个外部函数接口库。Expat。
FANN – Fast Artifical Neural Network library;一个神经网络的实现。GNU GPL2.1。
Firm – 一个 C 库,提供了基于图像中间表示,优化和适合编译器的汇编代码生成。配备了 C 的前端例子,使用相同的许可。GNU LGPLv2.1。
gjrand – 随机数字生成的例程库。GNU GPL2.1 或者 GNU GPLv3(用户的选择)。
GNU FreeIPMI – 一个带内和带外的 IPMI 实现。GNU GPL3。
GNU gperf – 一个完美的哈希函数生成器,提供一系列的字符串。输出 C 代码。GNU GPL3 或更高版本。
GNU Libffcall – 一个构建外部函数接口库的集合。GNU GPL3 或更高版本。
gperftools – 一系列测量和提高性能的实用工具集合。3-clause BSD。
hammer – 二进制格式的解析器组合。GNU GPL2.1.
Hans Boehm GC – C 的垃圾收集器?如果我用了不要介意。多种许可证,完全免费。
huffandpuff – 一个极小的哈夫曼编码器和解码器。公共领域。
iniparser – 一个 .ini 文件的解析器。Expat。
jemalloc – 一个 malloc 实现,着重于段错误的避免和可扩展并发支持。FreeBSD。
jwHash – 一个很快的哈希表实现。Apache2.0。
kdtree – KD-trees 的简单库。3-clause BSD。
Kitsune – 高效,通用的框架,用于软件的动态升级。 GNU LGPL3 或更高版本。
libavl – 一个包括各种自平衡二叉树的库。GNU GPL3 或更高版本。
libbson – BSON 实用库。Apache2.0。
libCello – 引入高级语言给 C 的库。
libcox – 一个运行跨平台系统调用和跨系统标准工具的库。FreeBSD。
libffi – 轻量级的外部函数接口库。Expat。
libgit2 – Git 的纯 C 实现。GNU GPL2 only, with a linking exception。
libimobiledevice – 一个跨平台协议库,用于与 iThings 通信。GNU LGPLv2.1 或更高版本(库),GNU GPL2.1 或更高版本(工具)。
libmpv – 音乐播放库。编译的时候加入 ./waf configure --disable-cplayer --enable-libmpv-shared 来避免生成音乐播放器。GNU GPL2.1 或更高版本。
libnfc – 一个平台独立的 NFC 库。GNU LGPL3。
libPhenom – 事件框架,用于构建高扩展和高性能系统。Apache2.0。
libsoundio – 跨平台,实时音频输入输出的库,有很多种后端。Expat。
libucl – 通用配置库解析器。FreeBSD。
libudp – 一个统一设计模式的 C 实现。GNU GPL3 或更高版本。
libuv – 跨平台异步 I/O。Expat。
libYAML – 一个 YAML 1.1 解析器和发射器。 Expat。
lzo – 一个很快的数据压缩库。GNU GPL2.1。
mpc – 解析器组合库。FreeBSD
ncurses – 彩色的终端 UI 库。GNU GPL3 或更高版本。
nope.c – 一个基于 C 语言,超级轻量级的软件平台,用于可扩展服务端和网络应用的开发(想想 C 程序员的 nodejs)。
pbc – 一个协议缓冲库。Expat。
rabbitmq-c – RabbitMQ 的客户端库。Expat。
Ragel – 为编译C的状态机的DSL。GNU GPL2.1。
uthash – 哈希表实现,允许已经存在的数据结构很容易地存在哈希表里面。1-clause BSD。
Viola – libCello 的简化版本。Expat。
zlib – 一个相当漂亮却精致不张扬的压缩库。3-clause BSD。
XML
“XML 是垃圾。真的,没有任何借口。XML 对人类不友好的,甚至对于电脑来说也是一场灾难。根本就没有这个可怕的垃圾存在的理由” -Linus Torvalds
Expat – 面向流的 XML 解析器。Expat。
libxml2 – 一个符合标准,轻量级的 XML 解析器。Expat。
mini-xml – 小型 XML 读写库。没有 C 标准库的依赖。GNU LGPL2.1 with static linking exception。