On Monday 23 August 2010 13:16:07 Michael Stefaniuc wrote: > IMHO gcc is *wrong* in emitting a warning there. sizeof(PCMWAVEFORMAT) > is a compile time constant and gcc can see that sizeof(PCMWAVEFORMAT) > falls well inside the number range expressible by a LONG. Logically > there is no difference between > formatsize <= sizeof(PCMWAVEFORMAT) > and > formatsize <= 16 > One gives a bogus warning and the other doesn't.
C99 std (para 6.5.3.4.4) states following about sizeof operator: "...its type (an unsigned integer type) is size_t, deļ¬ned in <stddef.h> (and other headers)." sizeof result is a compile-time constant but, unlike numeric constants, its type must always be size_t so gcc does the correct thing here.