| Other built-in functions provided by GCC |
| Previous | GNU C Language Extensions | Next |
GCC provides a large number of built-in functions. Some of these are for internal use in the processing
of exceptions or variable-length argument lists and will not be
documented here because they may change from time to time; we do not
recommend general use of these functions.
The remaining functions are provided for optimization purposes.
GCC includes built-in versions of many of the functions in the standard
C library. The versions prefixed with __builtin_ will always be
treated as having the same meaning as the C library function even if you
specify the '-fno-builtin' option (see C Dialect Options).
Many of these functions are only optimized in certain cases; if they are
not optimized in a particular case, a call to the library function will
be emitted
(but this does not make sense in TIGCC, as the standard C library is not provided with it).
The functions abort, exit, _Exit and _exit
are recognized and presumed not to return, but otherwise are not built
in (TIGCC defines them as macros anyway). _exit is not recognized in strict ISO C mode ('-ansi',
'-std=c89' or '-std=c99'). _Exit is not recognized in
strict C89 mode ('-ansi' or '-std=c89'). All these functions
have corresponding versions prefixed with __builtin_, which may be
used even in strict C89 mode.
Outside strict ISO C mode, the functions alloca, bcmp,
bzero, index, rindex, ffs, fputs_unlocked,
printf_unlocked and fprintf_unlocked may be handled as
built-in functions. All these functions have corresponding versions
prefixed with __builtin_, which may be used even in strict C89
mode
(in TIGCC, alloca is built-in;
other than that only __builtin_bzero might be useful).
The ISO C99 functions conj, conjf, conjl,
creal, crealf, creall, cimag, cimagf,
cimagl, imaxabs, llabs, snprintf,
vscanf, vsnprintf and vsscanf are handled as built-in
functions except in strict ISO C90 mode. There are also built-in
versions of the ISO C99 functions cosf, cosl,
expf, expl, fabsf, fabsl,
logf, logl, sinf, sinl, sqrtf, and
sqrtl, that are recognized in any mode since ISO C90 reserves
these names for the purpose to which ISO C99 puts them. All these
functions have corresponding versions prefixed with __builtin_
(again, none of these are implemented in TIGCC).
The ISO C90 functions abs, cos, exp, fabs,
fprintf, fputs, labs, log,
memcmp, memcpy,
memset, printf, putchar, puts, scanf,
sin, snprintf, sprintf, sqrt, sscanf,
strcat,
strchr, strcmp, strcpy, strcspn,
strlen, strncat, strncmp, strncpy,
strpbrk, strrchr, strspn, strstr,
vprintf and vsprintf are all
recognized as built-in functions unless '-fno-builtin' is
specified (or '-fno-builtin-function' is specified for an
individual function). All of these functions have corresponding
versions prefixed with __builtin_
(but most of these are defined as macros in TIGCC).
GCC provides built-in versions of the ISO C99 floating point comparison
macros that avoid raising exceptions for unordered operands. They have
the same names as the standard macros (isgreater,
isgreaterequal, isless, islessequal,
islessgreater, and isunordered), with __builtin_
prefixed. The GNU team intends for a library implementor to be able to simply
#define each standard macro to its built-in equivalent.