文档介绍:C程序设计语言
LiXiaojun
2009/4/22
Title
C程序设计语言
Author
Brian Dennis
Translator
影印版
Publishing House
机械工业出版社
ISBN
7-111-19626-0
Brief Introduction
目录
第四章函数与程序结构 2
初始化 2
预处理器 2
第五章指针与数组 2
第六章结构 3
第八章 UNIX系统接口 3
read和write 3
open create close和unlink 3
随机访问 lseek 3
附录标准库 3
简介 3
IO函数库:<> 3
错误处理函数:<> 5
字符类别测试:<> 5
字符串函数:<> 6
数学函数:<> 6
实用函数:<> 6
诊断:<> 7
可变参数列表:<> 7
非局部跳转:<> 8
信号:<> 8
日期和时间函数:<> 8
与具体实现相关的:<>和<> 8
第四章函数与程序结构
初始化
寄存器变量的地址是不可访问的。
在不进行显式初始化的情况下,外部变量和静态变量都会被初始化为0,而自动变量和寄存器变量的初值则没有定义。对于外部变量和静态变量来说,初始化表达式必须是常量表达式,并且只初始化一次(从概念上讲,是在程序开始执行前初始化),对于自动变量和寄存器变量来说,初始化表达式可以不是常量表达式,表达式中可以包含任意在此之前已经定义的值,包含函数调用。
数组的初始化可以在声明的后面紧跟一个初始化表达式列表,初始化表达式列表用花括号括起来,各初始化表达式之间通过逗号分隔。如果初始化表达式的个数比数组元素数少,则对外部变量、静态变量和自动变量来说,没有初始化表达式的元素将被初始化为0。
预处理器
#和##的使用
在宏定义中参数名以#作为前缀则将实际扩展时将被扩展为以双引号引用的实参的形式。如果实参中出现了双引号,则自动被替换为\”,如果实参中出现了反斜杠\,则自动会被替换为\\(经测试,GCC不会替换\为\\,VC也不会)。比如:
#define dprint(expr) printf(#expr “= %g\n”, expr)
dprint(x/y);
将被扩展为:
printf(“x/y”“= %g\n”, x/y);
预处理器运算符##为宏扩展提供了一种连接实际参数的手段,如果替换文本中的参数与##相邻,则该参数将被实际参数替换,##与前后的空白符将被删除,并对替换后的结构节性扫描。例如:
#define paste(front, back) front ## back
则宏调用
paste(name, 1)
将被替换为:
name1
第五章指针与数组
在函数定义中,形参char s[] 和 char *s 等价。
p[-1],p[-2]这样的表达式在语法上是合法的。
ANSI规定argv[0]的值是启动该程序的程序名,argv[argc] == NULL