warning C4003: “max”宏的实参不足

本文解决MFC项目引入PDFium后的编译错误,特别是关于safe_conversions_impl.h文件中的宏定义与标准库函数冲突的问题。通过修改源代码中的std::numeric_limits::max()调用来避免与Windows头文件中max宏的冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载pdfium编译成功后,想在一mfc单文档里面引用,

报错:1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(154): warning C4003: “max”宏的实参不足

...

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2589: “(”:“::”右边的非法标记

1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2059: 语法错误:“::”
1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2143: 语法错误 : 缺少“(”(在“::”的前面)
1>e:\hbj\test3\test0915\test10102\third_party\numerics\safe_conversions_impl.h(183): error C2059: 语法错误:“)”

源代码:safe_conversions_impl.h

template <typename Dst, typename Src>
struct DstRangeRelationToSrcRangeImpl<Dst,
                                      Src,
                                      INTEGER_REPRESENTATION_SIGNED,
                                      INTEGER_REPRESENTATION_SIGNED,
                                      NUMERIC_RANGE_NOT_CONTAINED> {
  static RangeConstraint Check(Src value) {

    return std::numeric_limits<Dst>::is_iec559
        ? GetRangeConstraint(value <= std::numeric_limits<Dst>::max(),
                                    value >= -std::numeric_limits<Dst>::max())
               : GetRangeConstraint(value <= std::numeric_limits<Dst>::max(),
                                    value >= std::numeric_limits<Dst>::min());
  }
};

原因:

因为Windef.h中定义了
#ifndef max
#define max(a,b)            (((a) > (b)) ? (a) : (b))
#endif

vc的max宏和std::numeric_limits<>max()函数冲突

解决:1.把std::numeric_limits<>max()用括号括起来避免和windows定义的宏混淆,例如(std::numeric_limits<Dst>::max)()

2.为了解决这个问题,Visual C++ 定义了另外两个功能相同的模板:_cpp_min() 和 _cpp_max()。我们可以用它们来代替std::min() 和 std::max()(未验证)

参考:http://blog.chinaunix.net/uid-17102734-id-2830143.html

http://blog.youkuaiyun.com/xidianzhimeng/article/details/21181279

http://blog.163.com/fleeting_ash/blog/static/663410862009310113424930/


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值