4.3.6 Sizes of Types
The sizes of the basic C types, e.g., 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 ANSI C
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
>, e.g., 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.
- 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>
.