Next: Zero Length, Previous: Hex Floats, Up: C Extensions
As an extension, the GNU C compiler supports fixed-point types as defined in the N1169 draft of ISO/IEC DTR 18037. Support for fixed-point types in GCC will evolve as the draft technical report changes. Calling conventions for any target might also change. Not all targets support fixed-point types.
The fixed-point types are
short _Fract,
_Fract,
long _Fract,
long long _Fract,
unsigned short _Fract,
unsigned _Fract,
unsigned long _Fract,
unsigned long long _Fract,
_Sat short _Fract,
_Sat _Fract,
_Sat long _Fract,
_Sat long long _Fract,
_Sat unsigned short _Fract,
_Sat unsigned _Fract,
_Sat unsigned long _Fract,
_Sat unsigned long long _Fract,
short _Accum,
_Accum,
long _Accum,
long long _Accum,
unsigned short _Accum,
unsigned _Accum,
unsigned long _Accum,
unsigned long long _Accum,
_Sat short _Accum,
_Sat _Accum,
_Sat long _Accum,
_Sat long long _Accum,
_Sat unsigned short _Accum,
_Sat unsigned _Accum,
_Sat unsigned long _Accum,
_Sat unsigned long long _Accum.
Fixed-point data values contain fractional and optional integral parts.
The format of fixed-point data varies and depends on the target machine.
Support for fixed-point types includes prefix and postfix increment
and decrement operators (++, --); unary arithmetic operators
(+, -, !); binary arithmetic operators (+,
-, *, /); binary shift operators (<<, >>);
relational operators (<, <=, >=, >);
equality operators (==, !=); assignment operators
(+=, -=, *=, /=, <<=, >>=);
and conversions to and from integer, floating-point, or fixed-point types.
Use a suffix ‘hr’ or ‘HR’ in a literal constant of type
short _Fract and _Sat short _Fract,
‘r’ or ‘R’ for _Fract and _Sat _Fract,
‘lr’ or ‘LR’ for long _Fract and _Sat long _Fract,
‘llr’ or ‘LLR’ for long long _Fract and
_Sat long long _Fract,
‘uhr’ or ‘UHR’ for unsigned short _Fract and
_Sat unsigned short _Fract,
‘ur’ or ‘UR’ for unsigned _Fract and
_Sat unsigned _Fract,
‘ulr’ or ‘ULR’ for unsigned long _Fract and
_Sat unsigned long _Fract,
‘ullr’ or ‘ULLR’ for unsigned long long _Fract
and _Sat unsigned long long _Fract,
‘hk’ or ‘HK’ for short _Accum and _Sat short _Accum,
‘k’ or ‘K’ for _Accum and _Sat _Accum,
‘lk’ or ‘LK’ for long _Accum and _Sat long _Accum,
‘llk’ or ‘LLK’ for long long _Accum and
_Sat long long _Accum,
‘uhk’ or ‘UHK’ for unsigned short _Accum and
_Sat unsigned short _Accum,
‘uk’ or ‘UK’ for unsigned _Accum and
_Sat unsigned _Accum,
‘ulk’ or ‘ULK’ for unsigned long _Accum and
_Sat unsigned long _Accum,
and ‘ullk’ or ‘ULLK’ for unsigned long long _Accum
and _Sat unsigned long long _Accum.
GCC support of fixed-point types as specified by the draft technical report is incomplete:
Fixed-point types are supported by the DWARF2 debug information format.