The C compiler implements a number of extensions to the C language.
The C compiler supports the _Restrict keyword as an equivalent to the restrict keyword in the C99 standard. The _Restrict keyword is available with -xc99=none and -xc99=all, whereas the restrict keyword is only available with -xc99=all.
For more information on supported C99 features, see Table C-6.
The __asm keyword (note the initial double-underscore) is a synonym for the asm keyword. If you use asm, rather than __asm, and compile in -Xc mode, the compiler issues a warning. The compiler does not issue a warning if you use __asm in –Xc mode. The __asm statement has the form:
where string is a valid assembly language statement.
The statement emits the given assembler text directly into the assembly file. A basic asm statement declared at file scope, rather than function scope, is referred to as a global asm statement. Other compilers refer to this as a toplevel asm statement.
Global asm statements are emitted in the order they are specified. That is, they retain their order relative to each other and maintain their position relative to surrounding functions.
At higher optimization levels, the compiler may remove functions that it believes are not referenced. Since the compiler will not know which functions are referenced from within global asms, it is possible that they may be removed inadvertently.
Note that extended asm statements, those which provide a template and operand specifications, are not allowed to be global. __asm and __asm__ are synonyms for the asm keyword and can be used interchangeably.
__inline and __inline__ are synonyms for the inline keyword (C standard, section 6.4.1)
__builtin_constant_p is a compiler builtin function. It takes a single numeric argument and returns 1 if the argument is known to be a compile-time constant. A return value of 0 means that the compiler can not determine that the argument is a compile-time constant or not. A typical use of this builtin function is in manual compile-time optimizations in macros.
__FUNCTION__ and __PRETTY_FUNCTION__ are predefined identifiers that contain the name of the lexically-enclosing function. They are functionally equivalent to the c99 predefined identifier, __func__. On Solaris platforms, __FUNCTION__ and __PRETTY_FUNCTION__ are not available in -Xs and -Xc modes.