C语言基础学习笔记——宏

宏定义:#define用来定义一个标识符和一个字符串,用这个标识符替代这个字符串。

1.不带参数的宏定义
#define 宏名 字符串
①#表示这是一条预处理命令;
②宏名,是一个标识符,要符合标识符的命名规则,并要求大写;
③字符串的位置可以是常量、表达式、格式字符串
注意:宏定义不是语句,不需要在末尾加分号;在编写程序时,通常将所有的#define放到文件开头的位置。

#undef的作用:结束宏定义的作用域。
比如:

#define TEST "This is an example"
int main()
{
	printf(TEST);
	#undef			//之后的语句将不能再使用这个宏
	return 0;
}

2.带参数的宏定义:不是简单的字符串替换,还要进行参数替换
定义形式:#define 宏名(参数列表) 字符串

#define MIX(a,b) ((a)*(b)+(b))	//一定记得加括号,不然容易出错,因为程序在替换字符串时,系统不会加括号,运算优先级有时就会出错
#define SUM(a,b) ((a)*(b))
int main()
{
	int sun=SUM(5+2,3+4);	//若定义时不加括号就会变成5+2*3+4,结果将会出错
	return 0;
}

3.条件编译的三种形式
第一种形式:

#include<stdio.h>
#define WIN
int main()
{
	#ifdef WIN			//根据WIN是否被定义决定执行哪一条语句
	printf("WIN 已经预定义\n");
	#else
	printf("WIN 没有被预定义\n");
	#endif
	return 0;
}

第二种形式:

#ifndef 标识符
程序段1;
#else
程序段2;
#endif

与第一种形式的区别是将ifdef改为ifndef,它的功能是如果标识符未被定义,则对程序段1进行编译,否则编译程序段2,与第一种相反。

第三种形式:

#if 常量表达式
程序段1; 
#else
程序段2;
#endif

如果常量表达式的值为真,则对程序段1进行编译,否则编译程序段2,因此可以使程序在不同条件下,完成不同的功能。

注意:上面的条件编译都可以用条件语句if-else实现,但用条件语句将会对整个源程序进行编译,生成的目标代码较长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标代码较短。如果进行条件选择的程序段很长,采用条件编译可以大大提高程序的运行效率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值