| 贵 州 学 习 网 |
|
5. 带参的宏和带参函数很相似,但有本质上的不同,除上面已谈到的各点外,把同一表达式用函数处理与用宏处理两者的结果有可能是不同的。main(){ int i=1; while(i<=5) printf("%d\n",sq(i++)); } sq(int y) { return((y)*(y)); }#define sq(y) ((y)*(y)) main(){ int i=1; while(i<=5) printf("%d\n",sq(i++)); } 在上例中函数名为sq,形参为y,函数体表达式为((y)*(y))。在例9.6中宏名为sq,形参也为y,字符串表达式为(y)*(y))。 两例是相同的。例9.6的函数调用为sq(i++),例9.7的宏调用为sq(i++),实参也是相同的。从输出结果来看,却大不相同。分析如下:在例9.6中,函数调用是把实参i值传给形参y后自增1。 然后输出函数值。因而要循环5次。输出1~5的平方值。而在例9.7中宏调用时,只作代换。sq(i++)被代换为((i++)*(i++))。在第一次循环时,由于i等于1,其计算过程为:表达式中前一个i初值为1,然后i自增1变为2,因此表达式中第2个i初值为2,两相乘的结果也为2,然后i值再自增1,得3。在第二次循环时,i值已有初值为3,因此表达式中前一个i为3,后一个i为4, 乘积为12,然后i再自增1变为5。进入第三次循环,由于i 值已为5,所以这将是最后一次循环。计算表达式的值为5*6等于30。i值再自增1变为6,不再满足循环条件,停止循环。从以上分析可以看出函数调用和宏调用二者在形式上相似, 在本质上是完全不同的。 来源:www.gzu521.com 6. 宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。看下面的例子。 文件包含 g/I^,vodg44xu[m [ 本 资 料 来 源 于 贵 州 学 习 网 IT认证全国计算机等级考试 http://Www.gzU521.com ] g/I^,vodg44xu[m 文件包含是c预处理程序的另一个重要功能。文件包含命令行的一般形式为: #include"文件名" 在前面我们已多次用此命令包含过库函数的头文件。例如: 对文件包含命令还要说明以下几点: 2. 一个include命令只能指定一个被包含文件, 若有多个文件要包含,则需用多个include命令。3. 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。 本文共2页: 第 [1] [2] 页
|
责任编辑:gzu521