VS2015--win32工程算法min/max与windows中的 min/max宏冲突

今天还是配置一个工程,遇到了这个问题,使用min时提示:输入正确的标识符。
看下面的代码:
在这里插入图片描述

导致这种问题的原因:宏定义产生了冲突。

解决方案一:

使用预处理器来屏蔽min:
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 ——>加入NOMINMAX

这种方式可能导致其他问题,斟酌使用。

解决方案二:

解决两个名字空间宏定义产生的冲突

在C语言编程中,对一个比较大型的项目,用到的库会比较多,如果设计的稍有疏忽,便可能产生宏定义的冲突。项目中有一个例子就是发生在两个头文件都定义了min/max这个宏,并且两个宏定义不太一致,从而导致了整个工程无法编译。
解决该问题的方法是将该宏undefine,具体的做法是,

在紧邻include语句之后对有冲突的宏进行undefine。例如库liba.h和头文件 app_pub.h就有对ISSPACE (ch)的不同定义,如果同时使用这两个文件,就会产生宏定义的冲突,这时,可以将其一个undefine(一个前提是,不是两个头文件定义的宏都会用到):
#include “app_pub.h”
#ifdef ISSPACE
#undef ISSPACE
#endif

这样的方法是解决宏定义冲突的一个无奈之举。事实上,宏定义的作用域早就被人诟病,特别放在头文件中,被数次包含之后,在不经意间又被覆盖,然后又被重新使用,也许此时已经不是原来的意思了,而我们在使用时还不知道。
为此,有一个简单的原则可以减少宏定义的冲突,

那就是尽量不要将宏定义置于头文件当中,除非有一个非将其置于头文件不可的理由。
除此之外,还有一个策略 是,如果一个文件/库的某个函数不会被其他地方所使用,那么就不要将其置于头文件当中。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yo~Magee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值