Discuz教程网

C语言案例教程 - 第十章 编译预处理和分割编译

[复制链接]
authicon dly 发表于 2011-1-11 17:19:39 | 显示全部楼层 |阅读模式
第10章:编译预处理和分割编译
【例10-1
分别用函数调用和带参数的宏定义这两种方法,编制打印整数110的平方的程序。
采用函数调用的程序


  1.        #include <stdio.h>
  2.         main()
  3.           { int i=1;
  4.             while(i<=10)
  5.               printf("%d\\n",square(i++));}
  6.         square(int n)
  7.           { return (n*n);}
复制代码


采用宏定义的程序


  1.         #define SQUARE(n) ((n)*(n))
  2.          main()
  3.           { int i=1;
  4.             while (i<=10)
  5.               printf("%d\\n",SQUARE(i++));}
复制代码


【例10-2
下面的数学演示程序,用来接收用户输入的半径,并计算和显示该半径对应的圆周长、圆面积、球表面积和球体积。
我们将计算圆的周长和面积、球的表面面积和体积的计算公式定义为带参数的宏,并将这些宏定义单独存放在文件circle.c中。假设文件circle.c放在C:\\TC\\INCLUDE子目录中。只要在主程序中将circle.c包含进来,就可以直接调用这些宏来计算。程序如下:


  1.         #include <circle.c>
  2.          main()
  3.           { float r;
  4.             printf("Input R:");
  5.             scanf("%f",&r);
  6.             printf("C=%.2f  ",CIRCLE(r));
  7.             printf("A=%.2f  ",AREA(r));
  8.             printf("S=%.2f  ",SURFICE(r));
  9.             printf("V=%.2f\\n",VOLUME(r));
  10.           }
复制代码


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.cfile1.cfile2.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个函数。


  1.         #include "c:\\\\tc\\\\file1.c"
  2.         main()
  3.           { printf("include exp\\n");
  4.             fun1();
  5.             printf("end\\n");}
  6.         /* file1.c */
  7.         #include "c:\\\\tc\\\\file2.c"
  8.         void fun1();
  9.         void fun1()
  10.           { printf("file1 included\\n");
  11.             fun2();}
  12.         /* file2.c */
  13.         void fun2();
  14.         void fun2()
  15.           { printf("file2 included\\n");}
复制代码


程序运行结果如下:

include exp

file1 included

file2 included

end
【例10-4
程序的分割编译。
下面程序的功能是把十进制数019中的每一个数转换成等值的4位十六进制数输出。转换工作由convhex()函数完成,主函数中用一个循环来多次调用convhex函数。为了阐明分割编译的问题,我们将这两个程序分别存放在源文件file2.cfile1.c中。


  1.         /* file1.c */
  2.         extern void convhex();
  3.         char hexbuf[10];
  4.         int x;
  5.         main()
  6.           { int i;
  7.             for (i=0;i<20;i++)
  8.               { x=i; convhex();
  9.                 printf("%d→%s\\n",x,hexbuf); }
  10.           }
  11.         /* file2.c */
  12.         #include <stdio.h>
  13.         extern x;
  14.         extern char hexbuf[];
  15.         void convhex(void)
  16.           { sprintf(hexbuf,"%04x\\n",x); }
复制代码

上一章:C语言案例教程 - 第九章 文件
下一章:完结







上一篇:【Discuz X1.5】公告栏美化插件
下一篇:初学者如何在PHP中使用Session
authicon  楼主| dly 发表于 2011-9-6 16:57:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 11:42

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表