Programming Language
Programming Paradigm
Agent-oriented
Component-based
Flow-based
Pipeline
Concatenative
Concurrent computing
Data-driven
Declarative
Functional
Dataflow
Cell-oriented (spredsheets)
Reactive
Graph-oriented
Goal-directed
Constraint
Logic
Constraint logic
Abductive logic
Inductive logic
Event-driven
Service-oriented
Time-driven
Expression-oriented
Feature-oriented
Function-level
Parallel computing
Process-oriented
Programming in the large
Programming in the small
Imperative
Non-structured
Array
Iterative
Structured
Procedural
Modular
Recursive
Object-oriented
Class-based
Prototype-based
Automata-based
By separation of concerns
Aspect-oriented
Subject-oriented
Role-oriented
Metaprogramming
Attribute-oriented
Automatic
Generic
Template
Policy-based
Language-oriented
Domain-specific
Grammar-oriented
Dialecting
Intentional
Reflective
Nondeterministic
Value-level
Semantic-oriented
TIOBE
C
Books
The C Programming Language
导言
类型、运算符与表达式
控制流
函数与程序结构
指针与数组
结构
输入与输出
UNIX系统接口
C: In a Nutshell
Programming in C
C Programming: a Modern Approach
C语言概述
C语言基本概念
编写简单C程序
预处理 -> 编译 -> 链接
gcc
-o 指定输出
-Wall 检查程序
通用形式
指令 main() { 语句; }
注释
/***** * * *****/ 盒型
不可嵌套
变量和赋值
类型
声明
初始化 vs 赋值
读入输入
scanf
定义常量
宏定义
标识符
关键字不可做名字
程序布局
缩进
格式化的输入/输出
表达式
选择语句
循环
基本类型
数组
函数
程序结构
指针
指针和数组
字符串
预处理器
编写大规模程序
结构、联合和枚举
指针的高级应用
声明
程序设计
低级程序设计
标准库
输入/输出
库对数值和字符数据的支持
错误处理
国际化特性
其他库函数
C Primer Plus
Expert C Programming: Deep C Secrets
C: 穿越时空的迷雾
这不是Bug,而是语言特性
分析C语言的声明
令人震惊的事实: 数组和指针并不相同
数组并非指针
我的代码为何无法运行
文件1: int mango[100]; 文件2: extern int * mango; /* 引用mango[i]的代码 */
什么是声明,而什么是定义
extern 告诉编译器对象的类型和名字,对象的内存分配在别处进行
数组和指针如何访问
左值(地址) = 右值(地址的内容)
数组名 vs 可修改的左值
左值编译时可知,右值运行时可知
指针需要间接取址
定义为指针,以数组方式引用
char a[] = "abcd"; ... a[i] // 编译器符号表有a的地址 addr; 取地址 addr+i 的内容 char * p = "abcd"; ... p[i] // 编译器符号表有p的地址 addr; 提取 addr 处指针的值 value; 取地址 value+i 的内容
使声明和定义相匹配
文件1: int mango[100]; 文件2: extern int mango[]; /* 引用mango[i]的代码 */
数组和指针的其他区别
区别
Topic
保存数据
保存数据的地址
Topic
间接访问数据
直接访问数据
Topic
常用于动态数据结构
常用于存储固定数目且类型相同的元素
Topic
malloc、free
隐式分配和删除
Topic
指向匿名数据
自身为数据名
字符串常量初始化
char a[] = "abcd"; // 只读 // 不可修改 未定义行为 char * p = "abcd"; // 可以修改
对链接的思考
运动的诗章,运行时数据结构
a.out及其传说
assembler output 的缩写
0407
超级块
#define FS_MAGIC 0x011954
段
ELF
COFF
Segment 包含几个 Section
Unix中的段 vs x86内存模型中的段
size 命令
text data bss
nm -s 命令
objdump -t 命令
a.out 文件
a.out神奇数字 a.out其他内容 BSS段所需大小 数据段 初始化后的全局和静态变量 文本段 可执行文件的指令
局部变量不进入a.out 运行时创建
BSS
只保存没有值的变量
不占据目标文件的空间
操作系统在a.out文件里干了些什么
对内存的思考
为什么程序员无法分清万圣节和圣诞节
再论数组
什么时候数组和指针相同
再论指针
你懂得C,所以C++不在话下
程序员工作面试的秘密
怎样检测到链表中存在循环
C语言中不同的增值语句的区别
库函数调用和系统函数调用的区别
文件描述符和文件指针的区别
编写代码确定变量是有符号数还是无符号数
打印一棵二叉树的值的时间复杂度
从文件中随机提取一个字符串
C Traps and Pitfalls
词法“陷阱”
语法“陷阱”
语义“陷阱”
链接
什么是链接器
将目标模块整合成载入模块
处理命名冲突
lint
声明与定义
每个外部变量只能定义一次
命名冲突与static修饰符
作用域限制在一个源文件內
形参、实参和返回值
函数必须在使用之前声明
类型自动转换
检查外部类型
头文件
外部对象只在头文件中声明
库函数
预处理器
可移植性缺陷
建议与答案
Pointers on C
快速上手
基本概念
数据
语句
操作符和表达式
指针
函数
数组
字符串、字符和字节
结构和联合
动态内存分配
使用结构和指针
高级指针话题
预处理器
输入、输出函数
标准函数库
经典抽象数据类型
运行时环境
ISO/IEC 9899:1999
ANSI C
ANSI
C89
C90
C99
ISO/IEC 9899:1999
C1x
Keywords
_Bool
布尔类型,值为0或1
_Complex
复数实部
_Imaginary
复数虚部
auto
局部变量(默认)
break
转移到循环和分支末尾
case
switch-case
char
字符型
const
变量和指针值不可变
continue
转移到循环和分支开始
default
switch默认情形
do
do-while循环
double
双精度浮点型
else
if-else
enum
枚举
extern
标识符在别处声明
float
单精度浮点型
for
for循环
goto
无条件转移
if
条件
inline
内联,将函数在调用处展开
int
整型
long
长整型
register
寄存器变量,优化
restrict
指针是访问一个数据对象唯一且初始的方式
return
返回
short
短整型
signed
有符号
sizeof
返回表达式或类型大小
static
函数及全局变量为文件作用域; 局部变量放在静态存储区
struct
结构
switch
分支
typedef
创建新类型
union
联合
unsigned
无符号
void
函数无返回值; 函数无参数; 无类型指针
volatile
变量可在其他地方被修改,应从内存读取
while
while循环
Types
Promotion
Conversion
Cast
Basic
Derived
Enumeration
Structure
Union
Bit-Field
Variables
Naming Rules
以字母或下划线(_)开头,跟着零到多个字母、数字、下划线
以下划线开头的名字通常被保留用于库程序
C关键字被保留
通常变量名小写而预处理名大写
名字可以为任意长度,但前31个字符必须唯一
如果名字文件外部可见,ANSI C 标准只保证前6个字符可用并且可能不区分大小写
Constants
符号
字符
字符串
整型
浮点型
Operators
() [] -> .
表达式
→
! ~ ++ -- + - * (type) sizeof
一元
←
* / %
乘法
→
+ -
加法
→
<< >>
位移
→
< <= > >=
关系
→
== !=
相等
→
&
按位与
→
^
按位异或
→
|
按位或
→
&&
逻辑与
→
||
逻辑或
→
?:
条件
←
= += -= *= /= %= &= ^= |= <<= >>=
赋值
←
,
顺序
→
Expressions
Statements
Functions
Callback
Inline
Linkage
External
Internal
No
Preprocessing Directives
#
空指令
#define
定义宏MACRO (参数)
#undef
结束作用域, 可重新定义
条件编译
#if
#elif
#else
#endif
#ifdef
#ifndef
#include
插入头文件内容
<标准库文件>
“自定义文件”
可15层嵌套
#line
改变行号和文件名
#error
错误信息
#pragma
修改编译器设置
\来续行
Libraries
GLIBC
GNU C Library
Standard Libraries
<assert.h>
<complex.h>
<ctype.h>
<errno.h>
<fenv.h>
<float.h>
<inttypes.h>
<iso646.h>
<limits.h>
<locale.h>
<math.h>
<setjmp.h>
<signal.h>
<stdarg.h>
<stdbool.h>
<stddef.h>
<stdint.h>
<stdio.h>
<stdlib.h>
<string.h>
<tgmath.h>
<time.h>
<wchar.h>
<wctype.h>
Skills
不用临时变量, 交换a和b的值
a ^= b; b ^= a; a ^= b;
a = a+b; b = a-b; a = a-b;
C++
Books
分支主题 2
分支主题 3
分支主题 4
分支主题 5
分支主题 6
STL
Boost
C#
Java
Script Language
ECMAScript
JavaScript
PHP
PHP: Hypertext Preprocessor
Zend
Ruby
Rails
Perl
Practical Extraction and Report Language
TMTOWTDI
CPAN
Perl 6
Python
EIBTI
Tkinter
Django
Jython
Go
Source Code Formatter
Artistic Style
Unicode
UTF
Books
Code Complete
The Pragmatic Programmer
Algorithms + Data Structures = Programs
Data Structures
ADT
Linear
Array
Tree
Graph
Set
Algorithms
Books
Array Sort
Straight Insertion
Shell
Bubble
Cocktail
Gnome
Quick
Selection
Heap
Merge
Bucket (Bin)
Counting
Radix
Brute-Force
Recursion
Divide & Conquer
Dynamic Programming
Greedy
Backtracking
Branch & Bound
Random
Search
Sequential
Binary
Binary Tree
Hash-based
Graph
Minimum Spanning Tree
Prim
Kruskal
Boruvka
Euclidean MST
Shortest Path
Single-source
Bellman-Ford
SPFA
Dijkstra
All-pairs
Floyd-Warshall
Johnson
Patterns
GoF Design Patterns
Creational
Abstract Factory
Builder
Factory Method
Prototype
Singleton
Multiton
Structural
Adapter
Class
Object
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Behavioral
Chain of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
PoEAA
POSA
MVC
MVC1
MVC2
Compiler