内容: 今天记录一下多语句宏可能会引发的不好发现的问题。有时候定义这个宏的目的,是为了方便替换,但是在有些场合却会带来不正确的结果。

代码:
【博客49】警惕:多语句宏的使用!(上)
代码中定义了一个用于异常处理的宏,当所需要的变量为负数的时候,就打印异常后退出。来看看执行结果吧!
【博客49】警惕:多语句宏的使用!(上)
结果:能达到我们的目的,当我们给i赋值-1的时候,能够正常发挥宏的作用,打印异常后退出。

那么当我们给i赋值一个正数的时候,是什么情况呢?
【博客49】警惕:多语句宏的使用!(上)
结果:
【博客49】警惕:多语句宏的使用!(上)
分析:函数提前退出了,连同后面的打印positive信息也没有执行,那么是为什么呢?因为宏的替换编译器是不会去帮我们检查上下文的,看到就替换,不管你什么情况,也没有类型检查。也就是说文中的宏定义的第一句虽然不符合条件,不会执行,但是宏的第二句语句一句不属于if的那个块了,属于执行流必执行的语句。所以无论正数负数,exit(1)都一定会执行,因此出现图中的情况。

建议:使用多语句宏一定要明确好使用地方,尽可能不要定义多语句宏。那么如果定义多语句宏,加个括号不就可以解决上述问题了吗,其实可以解决,但是会引发另外的问题,我们应该使用其他方法来代替使用宏,详细见下一篇。今天下午还有课,写完准备睡觉咯!

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

相关文章:

  • 2021-09-11
  • 2022-12-23
  • 2021-06-20
  • 2022-12-23
  • 2022-01-17
  • 2021-11-17
  • 2021-12-11
  • 2021-12-29
猜你喜欢
  • 2021-10-25
  • 2022-01-06
  • 2021-09-13
  • 2022-12-23
  • 2021-12-04
  • 2021-07-03
  • 2021-07-13
相关资源
相似解决方案