【问题标题】:What should I use instead of -Wconversion?我应该使用什么来代替 -Wconversion?
【发布时间】:2018-02-18 10:25:19
【问题描述】:

我在我的程序中引入了新的类型,例如tileno_ipageno_iblockno_u,而我以前只有intunsigned,这个想法是为了更清楚地传达什么样的函数接受或返回的值。

我曾希望使用 g++ 的 -Wconversion 标志来发现一些局部变量也应该转换为新类型的地方,但我最终会遇到很多需要无用强制转换的情况,例如

for (tileno_i i = 0 ; i < size(); i += 4) {
//                                  ^
// warning: conversion to tileno_i {aka short unsigned int} from 'int' may alter its value

是否有一个类似于Wconversion 的标志,它可以让我捕捉错误,而无需假设我对它们进行算术运算后立即将它们自动提升为ints?

【问题讨论】:

  • 无论您是否假设,促销都会发生,作为算术转换的一部分。
  • 同意,但它使得在来自外部标头的大量警告中无法跟踪这些新类型。我还想避免在所有地方都使用额外的演员来破坏可读性。另外,如果我总是以var = (tileno_t) arg + 1 结尾,那不会首先检查 arg 是否是 tileno_t。
  • 这可能说明了这些新类型的设计。
  • 请注意,POSIX 保留所有以 _t 结尾的类型名称以用于实现,因此不建议这样命名您自己的类型。
  • 看看 Boost 的 Stong typedef 参见:stackoverflow.com/questions/9211210/…

标签: c++ type-conversion warnings


【解决方案1】:

到目前为止,我最好的解决方法是将 typedef xxx_t 临时设置为整数以外的其他内容(例如枚举),以便由于尚未转换的行导致的“类型错误”触发的错误级别高于需要 -Wconversion 的错误级别.

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2010-12-06
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多