参考:http://www.cnblogs.com/mjios/category/459066.html
编译文件:cc -c one.c two.c 生成.o目标文件
链接文件:cc one.o two.o 默认生成 a.out 执行文件
指定生成的可执行文件名 cc -o one one.o
连续编译、链接:cc one.c cc -o one one.c 中间生成的.o文件会被删除,最后生成执行文件
cc one.c two.c 源文件超过一个时,目标.o文件便不会被删除(one.c 和two.c 需要一个main入口)
以后可以只编译更改的源文件 cc one.o two.o three.c, 生成可执行文件
cc -c a.c -o a.o 编译生成a.o
C语言32个关键字:
auto
shortdouble intlongcharfloatunsignedsigned
staticvolatileconst
returnvoid
struct enumtypedefunion
if else dowhile continue for
switch case break
register extern
default goto sizeof
当数值比较小(在char的取值范围内),用char 比用int 更节省内存开销,因为它只占1个字节
char c = ‘A’;与 char c = 65; 是等效的。一个汉字占两个字符,用char是不行的,
需要用字符数组来存储(c语言中没有字符串类型)。
局部变量可以在声明时不初始化,后续直接使用,与java不同
这样做不太好,因为这可能是一个随机的垃圾值,而不是0。
可以在基本数据类型的前面加一些修饰符,也有人称之为限定符,一样的意思。
有以下4种类型修饰符:
- short短型
- long长型
- signed有符号型 包括 正负数和0
- unsigned无符号型 正数和0
short int <==> short
long int 、long long int 、long long <==> long
long double <==> double
signed [int | long | char]
unsigned [int | long | char]
// 可以连续使用2个long
long long ll = 10;
// 下面两种写法是等价的
signed int si1 = 3;
signed si2 = 3;
// 下面两种写法是等价的
unsigned int us1 = 4;
unsigned us2 = 4;
// 也可以同时使用2种修饰符
signed short int ss = 5;
unsigned long int ul = 5;
unsignedcharc1 =10;
signedcharc2 = -10;
longdoubled1 =12.0;
c 语言中的进制:
二进制:int a = 0B(b)1100 ;
八进制: int b = 027;
十六进制:int c = 0X(x)AF3;
十进制:不加前缀 int d = 27;
printf(“%d”, a); printf(“a=%d, b=%x”, a, b);
%ld,long int
%lf,long double
%4d,表示的结果占4位及以上,原样输出;反之,在左边补空格,补满至4位
%-4d, 表示的结果(算上符号-)占4位及以上,原样输出; 反之,在右边补空格,补满至4位
%.2f 输出两位小数,默认是6位
%p 输出内存的地址,, 如:printf(“变量a的地址是:%p”, &a)
%u 输出的数值相当于是unsigned所修饰的。如果数值本身为负数,而要用%u来输出,
那么就需要转换:在不同的编译器,负数转成相应位数的二进制形式,
再去掉高位的符号位被0