gcc程序编译的过程

一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等4步才能变成可执行文件,通常使用“编译”统称这4个步骤。

阅读全文

C语言数组与指针的不同之处

数组并非指针C编程新手最常听到的说法之一就是“数组和指针是相同的”。不幸的是,这是一种非常危险的说法,并不完全正确。ANSI C标准6.5.4.2节建议: 注意以下声明的区别:extern int *x;extern int y[];第一条语句声明x是个int型的指针;第二条语句声明y是个int型数组,长度尚未确定(不完整的类型),其存储在别处定义。 标...

阅读全文

C语言的typedef

typedef是一种有趣的声明形式:它为一种类型引入新的名字,而不是为变量分配空间。在某些方面,typedef类似于宏文本替换——它并没有引入新的类型,而是为现有类型取个新名字,但它们之间存在一个关键性的区别。

阅读全文

C语言的联合(union)与枚举(enum)

联合(union)

联合(union)在许多其他语言中被称为变体记录(variant record)。它的外表与结构体相似,但在内存布局上存在关键性的区别。在结构体中,每个成员依次存储,而在联合中,所有的成员都从偏移地址零开始存储。这样,每个成员的位置都重叠在一起;在某一时刻,只有一个成员真正存储于该地址。

阅读全文

C语言的结构体(struct)

结构体就是一种把一些数据组合在一起的数据结构。在C语言中,进行组合的通常方法是把需要组合的东西放在花括号里面:{内容…}。关键字struct放在左花括号前面,以便编译器能够从程序块中认出它:struct {内容…}

阅读全文

分析C语言的声明(1)

C语言声明的语法有时会带来严重的问题。C语言声明的语法对于编译器的处理来说并不是什么大不了的事,但是对于一般的程序员,它却会成为障碍。C语言声明的语法渗透于整个语言使用的方方面面,毫不夸张的说,正是由于在组合类型方面的笨拙行为,C语言被显著且毫无必要的复杂化了。

阅读全文

分析C语言的声明(2)

声明器(declarator)声明器是所有声明的核心,简单的说,声明器就是标识符以及与它组合在一起的任何指针、函数括号、数组下标等。表: C语言中的声明器(declarator) 数量 C语言中的名字 C语言中出现的形式 零个或多个 指针 下列形式之一: *const volatile *volatile * *c...

阅读全文

Lint静态代码分析

lint是最著名的C语言工具之一,是由贝尔实验室SteveJohnson于1979在PCC(PortableC Compiler)基础上开发的静态代码分析。

阅读全文

C函数的返回值

首先看一段有问题的代码:

阅读全文

C运算符的优先级与结合性

C语言运算符优先级与结合性:
同一优先级的运算符,运算次序由结合方向所决定。

阅读全文