预处理详解(其一)

目录

一、预定义符号(预定义宏名):

二、#define(宏定义):

1、对象式宏(类对象式宏):   宏替换 (定义符号)

定义常量:

定义关键字(具有特殊意义的标识符):

其他的用法:

是否要加分号:

2、函数式宏(类函数式宏):宏展开(定义宏)

有参数函数宏:

无参数函数式宏:

​编辑

存在问题:

宏的副作用:

技巧:运用 逗号表达式:

 3、宏替换(规则):

4、函数式宏(宏定义)与函数对比:

简单的运算:优先用宏

对比图:

 三、#和##运算符:

1、#运算符:

2、##运算符:

 四、命名约定:

五、总结:


在C语言中凡是以“#”开头的均为预处理命令

一、预定义符号(预定义宏名):

c语言设置了一些预定义的符号(宏名),可以直接使用,在预处理阶段处理的,

__FILE__      //进行编译的源文件
__LINE__      //文件当前的行号
__DATE__      //文件被编译的日期
__TIME__      //文件被编译的时间
__STDC__      //如果编译器遵循ANSI C,其值为1,否则未定义
__FUNCTION__  //进行编译的函数__FILE__      

 使用:

上述预定义符号可在日志中使用,记录相应的信息写到文件里 

二、#define(宏定义):

1、对象式宏(类对象式宏):   宏替换 (定义符号)

    使用时宏,我们用到的是宏定义中的宏名,理解为幻术,其实它本来是suff,但是在幻术下看到的是name这个标识符,可是幻术终归是幻术;预处理节点就会打破幻术,展现其本来的样子(宏替换)宇智波一族有点厉害哈

不接收参数,只是根据宏定义做简单的字符串替换操作.

定义常量:

MAX  为宏名  100为替换的内容  在预处理阶段会用100去替换掉所有用MAX这个标识符:

#define MAX 100//之后的MAX会替换成100

int main()
{
	int a[MAX] = { 1,0 };
	return 0;
}

定义关键字(具有特殊意义的标识符):

指的是c语言中自带的(或者说被赋予了特殊意义的)标识符;宏定义它 可以理解为给这个标识符弄出来了一个别名。好比有些歌手会用一个艺名类似。

//定义标识符
#define INT int
INT main()
{
	INT a = 10;
	printf("%d", a);
	return 0;
}

简化关键字:有时候觉得关键字太长了,可以为它创建一个简短的名字

#define Cnt  const
int main()
{
	Cnt int a = 10;
	printf("%d", a);
	return 0;
}

其他的用法:

用更形象的标识符来替换一种实现;

#define do_forever  for(;;)
int main()
{
	//恭喜进入死循环,for循环里啥也没有就是死循环了
	do_forever;
	return 0;
}

在写case语句时,将break加上:

#define CASE break;case  //在写case语句的时候自动把 break写上。
int main()
{
	int i = 1;
	switch (i)
	{
	case 1:         // 等同于     case 1:
		CASE 2 :       //等同于barek;  case 2:
			CASE 3 :   //等同于break;  case 3:   break;
			break;
	}
	return 0;
}

定义的 stuff 过长时,我们可以分行写,除了最后一行都要加一个反\在后面表示续行

#define DEBUG_PRINT printf("file:%s\tline:%d\t \
									date:%s\ttime:%S\n",\
										__FILE__,__LINE__,\
										__DATE__,__TIME__)
int main()										
{
	DEBUG_PRINT;						
	return 0;
}									

是否要加分号:

从这些用法中,发现了么????我么都没有在宏定义末尾加“

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值