24.3.6 Sizes of Types
The sizes of the basic C types, for example char
, int
and long
, are not fully defined by the CCI. These types, by
design, reflect the size of registers and other architectural features in the target
device. They allow the device to efficiently access objects of this type. The C Language
Standard does, however, indicate minimum requirements for these types, as specified in
<limits.h>
.
If you need fixed-size types in your project, use the types defined in
<stdint.h>
, for example, uint8_t
or
int16_t
. These types are consistently defined across all XC
compilers, even outside of the CCI.
Essentially, the C language offers a choice of two groups of types: those that offer sizes and formats that are tailored to the device you are using; or those that have a fixed size, regardless of the target.
Example
The following example shows the definition of a variable, native
, whose
size will allow efficient access on the target device; and a variable,
fixed
, whose size is clearly indicated and remains fixed, even
though it may not allow efficient access on every device.
int native;
int16_t fixed;
Differences
This is consistent with previous types implemented by the compiler.
Migration to the CCI
If you require a C type that has a fixed size, regardless of the target device, use one
of the types defined by <stdint.h>
.