在gcc的-Wconversion警告下,字符和短字符似乎被隐式转换为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可以使警告安静下来,但是在变量类型已经匹配的地方添加强制转换有点奇怪。
我进一步调查了结果是否会导致。
其中asshort k = j & (short)~i;导致(unsigned short)~(unsigned short)0
有人能推荐一种处理这些警告的好方法吗?
除了禁用0xffff

最佳答案

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

关于c - short/char上的'〜'运算符隐式转换为int(C/gcc),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18553902/

10-13 05:57