第7章C程序的模块化设计(免费阅读).pptVIP

  • 13
  • 0
  • 约1.12万字
  • 约 59页
  • 2017-01-01 发布于重庆
  • 举报
7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.1 程序的模块化与模块化程序设计 7.1.2 C语言模块化程序设计 7.1.2 C语言模块化程序设计 7.1.2 C语言模块化程序设计 7.1.2 C语言模块化程序设计 7.1.2 C语言模块化程序设计 7.1.2 C语言模块化程序设计 7.1.3 源文件之间的接口 7.1.3 源文件之间的接口 例7.4 无参宏替换例。 #include stdio.h #define WIDTH 60 #define LENGTH WIDTH+40 void main() { int area1,area2,area3; area1=WIDTH*5; /* 宏展开应为 area1=60*5; */ area2=LENGTH*5; /* 宏展开应为 area2=WIDTH+40*5; → area2=60+40*5; */ area3=WIDTH*LENGTH; /* 宏展开应为area2=60*WIDTH+40;→area2=60*60+40; */ printf(“area1=%d,area2=%d,area3=%d\n”,area1, area2,area3); printf(“WIDTH=%d,LENGTH=%d\n”,WIDTH, LENGTH); /* 宏展开应为 printf(“WIDTH=%d,LENGTH=%d\n”,60,60+40); */ } 这个例子说明: ① 宏替换只是简单的串替换,如以printf替换PR,以60替换WIDTH等。 ② 宏定义时可引用已有的宏定义,如宏名LENGTH的定义中引用了宏名WIDTH,当然WIDTH应先有定义。 ③ 为了正确地表示宏展开后的运算顺序,宏定义时可有意识地使用圆括号来包围定义的式子,如要表示LENGTH是一个整体的数据,可进行如下宏定义: #define LENGTH (WIDTH+40) 则 area2=LENGTH*5; 宏展开为 area2=(60+40)*5 area3=WIDTH*LENGTH; 宏展开为 area3=60*(60+40) ④ 程序中用双引号框住的字符串内的字符,即使与宏名相同,也不进行宏替换。如printf( )中的格式字符串里的WIDTH、LENGTH等字符。 例7.5 带参宏替换例 #include stdio.h #define R 10 #define POWER(x) ((x)*(x)*R) void main() { int a,b,c; float d; a=8; b=2; d=500.0; c=POWER(a+b); /* 宏展开应为 c=((a+b)*(a+b)*10); */ d=d/POWER(a+b); /* 宏展开应为 d=d/((a+b)*(a+b)*10); */ printf(“c=%d,d=%f\n”,c,d); } 7.3 编译预处理 编译预处理方式以命令的形式,指示在对源程序进行编译之前的预先处理。编译预处理命令的结果将和源程序一起编译产生目标代码。 编译预处理命令以#号打头,占用单独的一行,命令尾不能有“;”号。它可以放于程序中的适当位置,一般放在程序前面或函数的前面。 C语言提供的预处理功能主要有3种: 宏定义命令 #define 文件包含命令 #include 条件编译命令 #if…#else…#endif 7.3 编译预处理 7.3.1 宏定义 7.3.2 文件包含 7.3.3 条件编译 宏定义的功能是用一个指定的标识符来表示一个字符串,标识符称为“宏名”。 C语言的宏定义命令以#define打头。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的一串字符去替换,这一过程称为宏替换或宏展开。 另外,宏名不仅可以代表一串字符,还可以以带参数形式来扩展宏的使用。因此,宏可分为不带参数的宏和带参数的宏两种。 7.3.1 宏定义 1.不带参数的宏定义

文档评论(0)

1亿VIP精品文档

相关文档