1

gcc の-Wconversion警告では、char と short が暗黙的に 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が昇格されることを言います。intintunsigned int

于 2013-09-01T00:21:38.147 に答える