二级c语言编译预处理.pptxVIP

  • 0
  • 0
  • 约1.42千字
  • 约 19页
  • 2019-11-28 发布于上海
  • 举报
编译预处理;一、宏定义 1.不带参数的宏定义 定义的一般形式: #define 标识符 字符串 凡是以“#”开头的均为预处理命令。“define”为宏定义命令 “标识符”为所定义的宏名 “字符串”可以是常数、表达式、格式串等 例如:#define PI 3.1415926;程序举例:;无参宏定义的一般规律: 宏名一般用大写字母表示 使用宏名代替程序中经常出现的常量 宏定义是用宏名来代替一个字符串,在宏展开时又以该字符串取代宏名,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现;宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换 定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换;宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名 可用宏定义表示数据类型,使书写方便,但要和typedef相区别 对“输出格式”作宏定义,可以减少书写麻烦,但不建议使用;2.带参数的宏定义 定义的一般形式: #define 宏名(形参表) 字符串 带参宏调用的一般形式为: 宏名(实参表); 例如: #define M(y) y*y+3*y k=M(5); 相当于k=5*5+3*5;;带参宏定义的一般规律: 宏名和形参表之间不能有空格出现 形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式;二、文件包含 一个源文件可将另一个源文件的内容全部包含进来 一般形式: #include文件名 或 #include文件名 一般库文件用,用户自定义文件用 ;三、条件编译 1.第一种形式: #ifdef 标识符 程序段1 #else 程序段2 #endif ;功能: 如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为: #ifdef 标识符 程序段 #endif;程序举例:;2.第二种形式: #ifndef 标识符 程序段1 #else ??序段2 #endif ;功能: 如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。与第一种形式的功能正相反 ;3.第三种形式: #if 常量表达式 程序段1 #else 程序段2 #endif;功能: 如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能 ;程序举例:;小结;4.为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号 5.文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件 6.条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效率 7.使用预处理功能便于程序的修改、阅读、移植和调试,也便于实现模块化程序设计

文档评论(0)

1亿VIP精品文档

相关文档