【发布时间】:2013-06-16 20:11:18
【问题描述】:
我正在使用类型特征检查数值范围,无符号类型会生成警告。
Comparison of unsigned expression >= 0 is always true
如何在特定代码范围内禁用某些警告?我将 GCC 样式 #pragma 与 Clang 一起使用,但这不起作用。
这是我的代码。
template<typename originT, typename destinationT>
void
assertForNumericRange(const originT value)
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wtype-limits"
assertWithReason(value >= std::numeric_limits<destinationT>::min());
assertWithReason(value <= std::numeric_limits<destinationT>::max());
#pragma GCC diagnostic pop
}
注意
目前,我将断言分为三组,浮点数、无符号整数、有符号整数。但如果可能的话,我希望将它们合二为一。
我正在使用 Xcode 5.0 测试版。在命令行中,它会报告以下内容: 苹果 LLVM 版本
5.0 (clang-500.1.58) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.3.0
Thread model: posix
【问题讨论】:
-
我认为你应该改变你的问题的标题,因为现在你正在寻找一个不同的答案(如何检查一个变量的值是否可以适合另一个可能不同类型的变量而不生成编译警告)
-
@Antonio 我仍在寻找一种抑制警告的方法。如果我必须要求它,我将发布一个新问题。谢谢。
-
你得到的警告是正确的,让你发现了一些令人讨厌的问题,不应该通过一些 pragma 定义来删除。在你身上,我会尝试向你的函数添加更多逻辑(if 语句),如果在编译器知道永远不会执行的某些代码中,不确定它是否会删除警告。
-
@Antonio 实际上,我尝试输入一些
if (std::is_signed<T>::value) ...,但编译器仍然会根据子表达式生成警告。因为抑制警告不是一个好的设计。所以也许我会使用单独的断言方法。
标签: c++ clang suppress-warnings