特别“玄学”的define

前言

记得我上篇题解的代码注释里头有一个介绍么?

我今天就来讲玄学的define

关于define

什么是define

#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。

注意,#define语句后不能加分号

为什么说define很玄学

我先给你看一段代码

#include<bits/stdc++.h>
#define US using
#define NS namespace
#define SD std
US NS SD; 
int main()
{
	return 0;
}

能不能运行呢?

答案是: 当然能了! \colorbox{grey}{\color{grey}\text{\Huge 当然能了!}} 当然能了!(刮刮乐)

这个玄学的define,将US定义成了using,将NS定义成了namespace,将SD定义成了std,所以语句US NS SD;等价于using namespace std;

真的很玄学

define之妙用-1

大佬们经常做题时需要long long,但是大佬们都太懒了,怎么办呢,C++为我们定义了一个关键字typedef,什么意思呢,就是type define

那有人就会问了,这个typedefdefine没有关系,那为什么要讲这个呢?

答案是,大佬们又发明出来了一种定义方法:

#define LL long long

这个等价于

typedef long long LL;

妈妈再也不用当心我考试写long long时间太长爆零了!

define之妙用-2

这个define还能赋值。

比如我想定义一个模数 998244353 998244353 998244353,那么我们可以这样写:

const int Mod=998244353;

但是,我们也可以用define来这么写:

#define Mod 998244353

const有一个坏处就是你需要计算这个const的玩意儿是什么数据的,不能是long long的数据你给定义成const int,也不能把double的数据你给定义成short int

这时候,define就显示出它的作用了,你看上面的define代码,你发现有定义关键字吗?

没有,所以,这个定义的关键字其实与它define的数值有关。

哦,还有,在一些C++来计算 π \pi π e e e的情况中,我们可以先定义出来前几位,比如:

#define Pi 3.1415926535

define的妙用-3

大佬们最喜欢的就是#define ... for了,这不,你瞧,上一个blog我就用了#define ... for了,我并不是想说明我是大佬所以,如果你想秀一波,来学这个吧。

正向for

#define Fre(i,a,b) for(int i=a;i<=b;i++)

反向for

#define Fer(i,a,b) for(int i=a;i>=b;i--)

这些循环不仅写的方便,而且更不容易错了。

define的妙用-4

这个玄学define还能定义函数

我们就打个比方吧,假如我要定义一个a+b的函数,则可以这样写:

inline int Add(int x,int y)
{
	return x+y;
}

那么我们可以用define来这样写:

#define Add(x,y) ((a)+(b))

同理,乘也可以这样写:

#define Mul(x,y) ((a)*(b))

define真是神奇啊!

define的妙用-5

这个玄学define还能定义多行代码!

例如MFC中的宏定义

#define MACRO(arg1, arg2) do { /

/* declarations */ /

stmt1; /

stmt2; /

/* ... */ /

} while(0) /* (no trailing ; ) */

最需要注意的是每个语句的后面要加上一个/符。

结语

好了,define我就讲到这里了,下次将什么好呢?对了,九江ifdefundef等等神奇的与define的玄学搭配吧!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值