You copied the Doc URL to your clipboard.

How the ARM C library fulfills ISO C specification requirements

The ISO specification leaves some features to implementors, but requires that implementation choices be documented. The implementation of the generic ARM C library in this respect is as follows:

  • The macro NULL expands to the integer constant 0.

  • If a program redefines a reserved external identifier, an error might occur when the program is linked with the standard libraries. If it is not linked with standard libraries, no error is diagnosed.

  • The __aeabi_assert() function prints information on the failing diagnostic on stderr and then calls the abort() function:

    *** assertion failed: expression, file name, line number


    The behavior of the assert macro depends on the conditions in operation at the most recent occurrence of #include <assert.h>.

  • The following functions test for character values in the range EOF (-1) to 255 inclusive:

    • isalnum()

    • isalpha()

    • iscntrl()

    • islower()

    • isprint()

    • isupper()

    • ispunct().

  • The fully POSIX-compliant functions remquo(), remquof() and remquol() return the remainder of the division of x by y and store the quotient of the division in the pointer *quo. An implementation-defined integer value defines the number of bits of the quotient that are stored. In the ARM C library, this value is set to 4.

  • C99 behavior, with respect to mathlib error handling, is enabled by default.


    In RVCT 4.0, this behavior is not enabled by default, but is enabled through the use of IMPORT __use_c99_matherr in assembly language, or #pragma import __use_c99_matherr in C.