1

使用 gcc 的-Wconversion警告,看起来 chars 和 shorts 被隐式转换为 int。

#include<stdio.h>

#pragma GCC diagnostic warn "-Wconversion"

void main(void)
{
    short i = 1;
    short j = 1;
    short k = j & ~i;
    printf("value %d\n", j);
}

给出以下警告,

test.c: In function 'main':
test.c:9:15: warning: conversion to 'short int' from 'int' may alter its value [-Wconversion]
   short k = j & ~i;
               ^

强制转换为短模式可以使警告安静下来,short k = j & (short)~i;但是在变量类型已经匹配的地方添加强制转换有点奇怪。

我调查了是否进一步并(unsigned short)~(unsigned short)0导致0xffff. 结果在
哪里~(unsigned short)00xffffffff

谁能推荐一种处理这些警告的好方法?
除了禁用-Wconversion.

4

1 回答 1

8

根据 C 标准(6.5.3.3)整数提升是在 的操作数上执行的~,结果是提升类型。整数提升(6.3.1.1)基本上说所有小于的整数类型int都被提升为int(如果int可以表示原始类型的所有值)或unsigned int(否则)。

于 2013-09-01T00:21:38.147 回答