3 General Notes Concerning Library Code
The following points relate to the general usage of functions within the library.
MPLAB XC8 Functions With Floating-point Arguments
With the MPLAB XC8 compiler (for both PIC and AVR targets), the
double and long double types are the same size
and format as the 32-bit float type. Many math-related functions
have separate implementations for each of the three floating-point types (e.g.
acos for double types, acosl
for long double types, and acosf for
float types). In these cases, only the float
instance of the function is fully implemented. Calls to either the
double or long double variants of the
functions will be mapped to the float implementation.
MPLAB XC16/XC-DSC and double Types
By default, both the MPLAB XC16 and XC-DSC compilers uses a double
type equivalent to float, which is 32 bit wide. The
-fno-short-double option makes double
equivalent to long double, which is 64 bit wide. The
characteristics of floating-point numbers, described in <float.h> Floating-Point Characteristics, change with
the use of this option, as indicated.
MPLAB XC8 For AVR Functions With Pointers Arguments
The MPLAB XC8 Compiler for AVR can store objects qualified const
into program memory (rather than data memory) and allow pointers to
const types to access such objects. The feature is only
available for some devices and is enabled using the
-mconst-data-in-progmem option. When enabled, pointers to a
const-qualified type are treated differently to similar
pointers without the const qualifier, so for example the addresses
held by pointers of type char * and const char *
are interpreted as belonging to different address spaces.
const-qualified type becomes a
const-qualified version of that type. For example, with the
-mconst-data-in-progmem option specified, the prototype for the
strtof function, which is specified in the C standard
as:float strtof(const char * __restrict, char ** __restrict);becomes:float strtof(const char * __restrict, const char ** __restrict);This
change might affect how your program should be defined.