当前位置:  开发笔记 > 运维 > 正文

如何处理海湾合作委员会的-Wconversion警告?

如何解决《如何处理海湾合作委员会的-Wconversion警告?》经验,为你挑选了0个好方法。

我正在用GCC的-Wconversion警告标志构建我的项目.(gcc(Debian 4.3.2-1.1)4.3.2)在64位GNU/Linux OS /硬件上.我发现它有助于确定我混合类型的位置或者应该使用哪种类型的清晰度.

在大多数激活它的警告的其他情况下它并没有那么有用,我问我打算如何处理这些问题:

enum { A = 45, B, C };   /* fine */

char a = A;              /* huh? seems to not warn about A being int. */
char b = a + 1;          /* warning converting from int to char */
char c = B - 2;          /* huh? ignores this *blatant* int too.*/
char d = (a > b ? b : c) /* warning converting from int to char */

由于上述测试(案例ac)的意外结果,我也要求解释这些差异.

编辑:(char)为了防止警告,是否过度工程化所有这些?

Edit2:一些额外案例(继上述案例之后):

a += A;         /* warning converting from int to char */
a++;            /* ok */
a += (char)1;   /* warning converting from int to char */

除此之外,我所要求的是主观的,我想听听其他人在你认为某些开发人员主张删除所有警告时如何处理转换警告.

YAE:

一种可能的解决方案是使用ints而不是chars?实际上,它不仅需要更多内存,而且速度也更慢,如下面的代码所示.数学表达式只是用于构建时获取警告-Wconversion.我认为使用char变量的版本比使用ints 的版本运行速度慢,但是在我的(64位双核II)系统上,int版本速度较慢.

#include 

#ifdef USE_INT
typedef int var;
#else
typedef char var;
#endif

int main()
{
    var start = 10;
    var end = 100;
    var n = 5;
    int b = 100000000;
    while (b > 0) {
        n = (start - 5) + (n - (n % 3 ? 1 : 3));
        if (n >= end) {
            n -= (end + 7);
            n += start + 2;
        }
        b--;
    }
    return 0;
}

传递-DUSE_INT给gcc来构建上述代码片段的int版本.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有