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
    

    Note

    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.

    Note

    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.