预处理命令,宏定义,文件包含,条件编译

先写总结

(1)C语言的预处理命令都是以“#”号开始的,他们不是C语言的语句,是在预编译时处理的。
(2)宏定义分为两种:不带参数的宏和带参数的宏(所谓的函数宏)
(3)宏定义时末尾一般不要加分号
(4)宏扩展的整体或参数一般要用()括起来
(5)文件包含是编写C语言程序中不可缺少的,很重要
(6)使用条件编译的主要原因:一是便于移植程序,二是方便程序调试

不带参数的宏定义

#define   标识符   单词串

1宏名的作用域是从#define定义之后直到该宏定义所在文件结束,但通常把#define宏定义放在源程序文件的开头部分。如果需要终止宏的作用域,可以使用#undef命令,其一般格式为:

#undef   标识符

2宏定义可以嵌套定义但是不能递归定义。
3程序中字符串常量即双引号中的字符,不能作为宏进行宏替换操作。
4宏可以被重复定义
5在定义宏是如果宏是一个表达式,那么一定要将这个表达式用()括起来

带参数的宏(函数宏)

#define   标识符(参数列表)   单词串

参数表由一个或多个参数构成,参数只有参数名,没有数据类型符,参数之间用逗号隔开,参数名需是合法的标识符
单词串是宏的内容文本,也称为宏体,其中通常会引用宏的参数

带参数的宏与函数之间的区别。。。

文件包含

一个C语言源程序通过#include命令将另一个文件的全部内容包含进来。
预编译器是这样来处理#include命令的:将被包含文件的内容插入到源程序中#include命令的位置,一形成新的源程序。

使用算引号“ ”:系统首先到当前目录下查找被包含文件,如果没有找到,再到系统指定的“文件包含目录”去查找。#include "c:\prg\p1.h"在同文件中除可以包含宏定义外,还可以包含外部变量定义,结构定义类型等。
一条包含命令只能制定一个被包含文件。如果要包含N个文件,则需要N条包含命令。
文件包含可以嵌套,即被包含文件中又包含另一个文件。

条件编译

条件编译有几种常见的形式
1
#if … #endif

#if	条件1
	程序段1
#elif	条件2
	程序段2
	.
	.
	.
#else
	程序段n
#endif			

if后面的条件必须是一个常量表达式

#if和#elif常常与defined命令配合使用,defined命令的格式为:

defined (宏名) 		或		defined 宏名

其功能是判断某个宏是否已经定义,如果已经定义,defined命令返回1,否则返回0.defined命令只能与#if或#elif配合使用,不能单独使用。例如,#if defined(USA)的含义是“如果定义了宏USA”。

2
#ifdef … #endif

#ifdef		宏名
		程序段 1
#else
		程序段 2
#endif

“#ifdef 宏名"的含义是判断是否定义了宏,它等价于”#if defined (宏名)"
其作用是:如果宏名已被#define行定义了,则编译程序段1,否则编译程序段2

3
#ifndef … #endif

#ifndef	宏名
		程序段 1
#else
		程序段 2
#endif

条件编译与分支语句不能混为一谈,其区别为
(1)条件编译是在预编译时处理;而条件语句则是在程序运行时处理
(2)条件编译中的条件不可以包含变量名,只能是常量表达式(通常包括宏名),可以不加括号
(3)…
(4)条件编译可以放在所有函数的外部,也可以放在某函数的内部;分支语句只能出现在某函数的内部。

为什么要要使用条件编译

(1)便于程序的移植
(2)便于程序的调试,选择地输出临时结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值