第10章:编译预处理和分割编译 【例10-1】 分别用函数调用和带参数的宏定义这两种方法,编制打印整数1~10的平方的程序。 ① 采用函数调用的程序
- #include <stdio.h>
- main()
- { int i=1;
- while(i<=10)
- printf("%d\\n",square(i++));}
- square(int n)
- { return (n*n);}
复制代码
② 采用宏定义的程序
- #define SQUARE(n) ((n)*(n))
- main()
- { int i=1;
- while (i<=10)
- printf("%d\\n",SQUARE(i++));}
复制代码
【例10-2】 下面的数学演示程序,用来接收用户输入的半径,并计算和显示该半径对应的圆周长、圆面积、球表面积和球体积。 我们将计算圆的周长和面积、球的表面面积和体积的计算公式定义为带参数的宏,并将这些宏定义单独存放在文件circle.c中。假设文件circle.c放在C:\\TC\\INCLUDE子目录中。只要在主程序中将circle.c包含进来,就可以直接调用这些宏来计算。程序如下:
- #include <circle.c>
- main()
- { float r;
- printf("Input R:");
- scanf("%f",&r);
- printf("C=%.2f ",CIRCLE(r));
- printf("A=%.2f ",AREA(r));
- printf("S=%.2f ",SURFICE(r));
- printf("V=%.2f\\n",VOLUME(r));
- }
复制代码
circle内容如下:
#define PI
3.141593
#define CIRCLE(r)
2*PI*(r)
#define AREA(r) PI*(r)*(r)
#define SURFICE(r)
AREA(r)*4
#define VOLUME(r)
SURFICE(r)*(r)/3
【例10-3】
#include的嵌套使用。下面的main()函数、fun1()函数和fun2()函数分别以file.c、file1.c和file2.c为名存放在c:\\\\tc子目录下,file.c包含了file1.c,而file1.c又包含了file2.c。当对file.c编译时,首先将file1.c中的文本替换#include \"c:\\tc\\file1.c\"。将file2.c中的内容替换#include \"c:\\tc\\file2.c\",因此,file.c编译时,实际编译了3个函数。
- #include "c:\\\\tc\\\\file1.c"
- main()
- { printf("include exp\\n");
- fun1();
- printf("end\\n");}
- /* file1.c */
- #include "c:\\\\tc\\\\file2.c"
- void fun1();
- void fun1()
- { printf("file1 included\\n");
- fun2();}
- /* file2.c */
- void fun2();
- void fun2()
- { printf("file2 included\\n");}
复制代码
程序运行结果如下:
include exp
file1 included
file2 included
end
【例10-4】 程序的分割编译。 下面程序的功能是把十进制数0~19中的每一个数转换成等值的4位十六进制数输出。转换工作由convhex()函数完成,主函数中用一个循环来多次调用convhex函数。为了阐明分割编译的问题,我们将这两个程序分别存放在源文件file2.c和file1.c中。
- /* file1.c */
- extern void convhex();
- char hexbuf[10];
- int x;
- main()
- { int i;
- for (i=0;i<20;i++)
- { x=i; convhex();
- printf("%d→%s\\n",x,hexbuf); }
- }
- /* file2.c */
- #include <stdio.h>
- extern x;
- extern char hexbuf[];
- void convhex(void)
- { sprintf(hexbuf,"%04x\\n",x); }
复制代码
上一章:C语言案例教程 - 第九章 文件
下一章:完结
|