C语言杂谈——预处理程序

预处理的三种用途:

1)处理宏常量及宏函数;

2)合并(include)源文件;

3)条件性编译。


(一)#define和#undef

宏常量

格式:

#define  别名  常数或符号

#define与typedef的区别:

typedef char* STRING;
STRING pc1,pc2;

这意味着pc1,pc2都是STRING类型的变量。

#define STRING char*
STRING pc1,pc2;

这意味着pc1是字符指针变量;pc2是char类型的变量。

带参数的宏

文字取代;

1)一般用法

#define CLASS(type)  struct type

CLASS(book)
{
	int pages;
	double length;
	double width;
}

处理后变成为:

struct book
{
	int pages;
	double length;
	double width;
}

2)跨行的宏

使用“\”可将宏定义切分为数行。

如:

//第一个宏
#define CLASS(type)\
struct type\
{
//第二个宏
#define END\
};

//使用宏
CLASS(book)
	int pages;
	double length;
	double width;
END;

预处理后:

struct book
{
	int pages;
	double length;
	double width;
};

3)##的用法

//定义宏
#define FUN(type)\
type * type_function()

//使用宏
FUN(int)
{

}

预处理后:

int * type_function()
{

}

type_function是一个完整的名称,其中的type并不是参数。

//定义宏
#define FUN(type)\
type * type##_function()

//使用宏
FUN(int)
{

}

预处理后:

int * int_function()
{

}

type##表明此type是参数。

 

定义数学表达式:

1)表达式必须用小括号括住;

2)参数必须用小括号括住;

3)参数中避免出现“++”“—”。

例:

#define max(x,y)  ((x)>(y) ? (x):(y))
#define max3(x,y,z)	max(max(x,y),(z))

#undef (取消宏)

#define PI 3.1415926

#undef PI

#define ~ #undef 说明宏的有效范围

 

(二)条件性编译

#if	 宏常量

#else

#endif

条件编译的用途:

1)提高查错能力;

2)增加程序的可移植性。

 

(三)条件性定义

#ifdef 宏
#ifndef 宏
#endif
#else

用来解决(防止)重复定义。

转载于:https://www.cnblogs.com/hanzhaoxin/archive/2012/11/21/2781479.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值