This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 16-bit int


On 11/08/2012 12:47, Vincent Lefevre wrote:
On 2012-08-10 09:05:13 +0000, Göran Steen wrote:
Any C99 compiler - and almost all pre-C99 compilers - will have
<stdint.h>. I don't know of any compiler less than 15 years old that
doesn't come with a <stdint.h>, and many people using such compilers
have written their own <stdint.h>.

I thought that Microsoft's compiler didn't have <stdint.h>. I've also heard that <inttypes.h> is more common.

The int_fast16_t and int_fast32_t types (and the unsigned versions)
are mandatory in <stdint.h>, so you can take it for granted that
/all/ compilers support them. This is unlike the fixed-size types
(like int16_t) that will be defined if and only if the target
supports types of exactly that size (some architectures don't
support the smaller types).

But int_fast16_t is useless to test whether code can be affected by 16-bit truncation on platforms for which int_fast16_t is really a 16-bit type. For tests, int16_t is necessary. Now the user may want to know what targets provide this type.


The use of "int_fast16_t" was to get correct and optimal code, whether the target is 16-bit or 32-bit. You are right that this will not test whether the code will work on 16-bit targets if it is compiled on a 32-bit target - using int16_t will help more for that (but it won't give guarantees, unless you are absolutely sure there are no hidden int promotions).




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]