使用宏的注意事项和一些功能实现

用宏实现一个 比较两个数的大小,宏对比函数的优势和劣势,宏是不检查参数类型的,函数是要检查参数类型,宏是可以比较任何用大小来比较的数值,宏的运行速度相比函数,少了调用,返回,宏只是替换,所以速度会更快一些,相对函数,宏也是有劣势的,宏不能调试,也不能递归,代码替换后,会比较长,宏可能会带来运算符优先级的问题,导致程序容易出现错

#include <stdio.h>
#define COMPARY(n,m) ((n)>(m)?(n):(m))
int main()
{
    printf("%d
",COMPARY(3, 2));
    return 0;
}

dbb4174a13d4477f9422e8178db965b6.png

#ifdef 和#endif 配套使用,可以实现,如果#ifdef 加宏名称 有被定义,则执行 #ifdef到#endif之间的代码,如果为假则,这中间的代码不执行,也可以跟if else if else一样多分支判断

 

#include <stdio.h>
#define MAX
int main()
{
//这个宏是用来判断宏名称是否有被定义,为真则执行代码,为真则不执行代码
#ifdef MAX
    printf("%d
",3);
#endif
    return 0;
}

//
//这个宏是跟if.  else if  else一样可以多分支判断的 
#define COMPARY(n,m) ((n)>(m)?(n):(m))
#define MAX 4
int main()
{
#if MAX>3
           printf("代码执行到这11111
");
#elif MAX<4
           printf("代码执行到这22222
");
#else
           printf("代码执行到这33333
");
#endif
    return 0;
}

94a9e1dadc024689ac812abf9cfff4cd.png

 

#undef
这条指令用于移除一个宏定义。

 

#define MAX 4
int main()
{
    printf("%d
",MAX);
#undef MAX
//这个宏的功能是,从这个宏以下的关于MAx的定义都取消掉
    printf("%d
",MAX);
    return 0;
}

由于我们从中间取消对MAX的定义了,所以系统直接报错了。 

4e76aeac0b7947f1bf117e0cbbe52f0d.png 

防止头文件重复包含的宏有两种,第一种是:

#ifdef __头文件名__

#define __头文件名__

意思是如果这个头文件,已经被包含了 那他就不会再进行包含,如果没有被包含 ,那他就会执行一次包含,由于重复的包含头文件,会让代码大小变的很大,所以有必要加上防重复包含的宏

第二种是:#pragma once 这是新的防重复包含的宏,但只适用于较新的编译器,旧版本的编译器,是识别不出来的

#endif

关于头文件包含的小知识 如果我们是用<>尖括号来包含头文件的话,系统只会在库文件里面去寻找进行链接,如果是用“”双引号来包含的,系统会在代码所在的目录寻找文件,没有找到再到库文件里面去寻找。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值