考研专业课C语言复习第八章

2012/3/20 16:43:24 来源: 网络
分享:

  第八章 预编译处理

  c编译系统在对程序进行通常的编译之前,先进行预处理。c提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译

  1. 宏定义

  不带参数的宏定义

  用一个指定的标识符来代表一个字符串,形式:#define 标识符 字符串

  几点说明:

  1) 宏名一般用大写

  2) 宏定义不作语法检查,只有在编译被宏展开后的源程序时才会报错

  3) 宏定义不是c语句,不在行末加分号

  4) 宏名有效范围为定义到本源文件结束

  5) 可以用#undef命令终止宏定义的作用域

  6) 在宏定义时,可以引用已定义的宏名

  带参数的宏定义

  定义形式:#define 宏名(参数表) 字符串

  这和函数有些类似,但他们是不同的:

  1) 函数调用时,先求实参表达式值,再代入形参,而宏只是简单替换,并不求值

  2) 函数调用是在程序运行时分配内存的,而宏展开时并不分配内存,也没有返回值的概念

  3) 对函数中的实参和形参都要定义类型,而且要求一致,宏名无类型,其参数也没有类型。

  4) 函数只有一个返回值,而宏可以得到几个结果

  5) 宏替换不占运行时间,只占编译时间,而函数调用占运行时间

  2. 文件包含处理

  #include "文件1" 就是将文件1的全部内容复制插入到#include位置,作为一个源文件进行编译。

  在#include命令中,文件名可以用" "也可以用< >,假如现在file1.c中包含file2.h文件," "表示系统先在file1.c所在目录中找file2.h,如果找不到,再按系统指定的标准方式检索目录,< >表示系统直接按指定的标准方式检索目录。所以用" "保险一点。

  3. 条件编译

  条件编译指不对整个程序都编译,而是编译满足条件的那部分。条件编译有以下几种形式:

  1)#ifdef 标识符

  程序段1

  #else

  程序段2

  #endif

  它的作用:当标识符在前面已经被定义过(一般用#define),则对程序段1编译,否则对程序段2编译。

  2)#ifndef 标识符

  程序段1

  #else

  程序段2

  #endif

  它的作用和#ifdef相反,当标识符没被定义过,对程序段1编译,否则对程序段2编译。

  3)#if 表达式

  程序段1

  #else

  程序段2

  #endif

  它的作用:当表达式值为真(非0)时,对程序段1编译,否则对程序段2编译。

  2025考研人数达388w,考研热度依旧火热!如何备战2026考研?哪个考研专业适合自己?在职考生如何备考?考研知识点繁多,择校困难大,和海天考研咨询老师聊一聊。网课面授多项选,专业辅导1对1全年集训随时学!

中间广告图.jpg

活动专题