2013-08-31 57 views
1

gcc的-Wconversion警告,它看起來像字符和短褲被隱式轉換爲整數。short/char上的'〜'運算符隱式轉換爲int(C/gcc)

#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)0結果在0xffffffff

任何人都可以推薦一個處理這些警告的好方法嗎?
除了禁用-Wconversion

+3

「但是如果在類型已經匹配的地方添加了演員,這有點奇怪。」 - 他們不匹配。正如您所說的那樣,在執行操作之前,這些值會隱式轉換爲int(如標準所要求的那樣),並且此時類型不再匹配。由於類型不匹配,我沒有看到你已經找到的解決方案的問題(添加一個演員)。 – hvd

+0

編輯問題,注意**變量**類型已經匹配。顯然應用操作員後他們不。 – ideasman42

+0

請注意,您可以施放以安靜警告,並且我檢查了'gcc'至少不會在有/沒有演員時更改彙編器輸出。 – ideasman42

回答

7

根據C標準(6.5.3.3),對~的操作數執行整數提升,結果是提升類型。整數促銷(6.3.1.1)基本上說所有小於int的整數類型都被提升爲int(如果int可以代表原始類型的所有值)或unsigned int(否則)。