On Fri, Nov 23, 2007 at 12:02:31AM +0100, Manuel López-Ibáñez wrote: > For this testcase: > > void g(const unsigned char b) > { > unsigned short c = b & 0xff; > } > > we get: > > wconversion-3.c:3: warning: conversion to 'unsigned char' from 'int' > may alter its value > wconversion-3.c:3: warning: conversion to 'short unsigned int' from > 'int' may alter its value
The type of (b & 0xff) is int. However, the value is bounded, and must be in 0x00 to 0xff, so the conversion will not alter the value. I don't know if the warning code is structured to take the value range into account. In any case, the double warning is odd.