2.4.5. 独立 C 库函数

本节的其余部分中列出了未初始化的库中提供的包含文件及其包含的函数。 对于某些无法使用的函数,可通过重新实现它们所依赖的库函数以将其变为可用。

alloca.h

如果未进行库初始化,则无法使用此文件中列出的函数。 有关说明,请参阅使用 C 库构建应用程序

assert.h

此文件中列出的函数需要高级 stdio__rt_raise()_sys_exit()。 有关说明,请参阅调整错误信号、错误处理和程序退出

ctype.h

此文件中列出的函数需要 locale 函数。

errno.h

此文件中的函数不需要进行任何库初始化或函数重新实现即可使用。

fenv.h

此文件中的函数不需要进行任何库初始化即可使用,而只要求重新实现 __rt_raise()

float.h

此文件不包含任何代码。 此文件中的定义不需要进行库初始化或函数重新实现。

inttypes.h

此文件中列出的函数需要 locale 函数。

limits.h

此文件中的函数不需要进行任何库初始化或函数重新实现即可使用。

locale.h

在调用使用 locale 函数的任何函数之前,应先调用 setlocale()。 例如:

setlocale(LC_ALL, "C")

请参阅 locale.h 的内容,以了解下列函数和数据结构的详细信息:

  • setlocale() 选择由类别和 locale 参数指定的相应区域设置。

  • lconv 是由 locale 函数使用的一种结构,用于依照当前区域设置规则设置数量的格式。

  • localeconv() 创建一个 lconv 结构,并返回指向该结构的指针。

  • _get_lconv() 填充参数所指向的 lconv 结构。 此 ISO 扩展删除了对库中静态数据的要求。

locale.h 还包含与 locale 函数一起使用的常数声明。 有关详细信息,请参阅使用汇编程序宏调整区域设置和 CTYPE

math.h

要能够使用此文件中的函数,必须先调用 _fp_init() 并重新实现 __rt_raise()

setjmp.h

此文件中的函数不需要进行任何库初始化或函数重新实现即可使用。

signal.h

如果未进行库初始化,则无法使用此文件中列出的函数。 有关构建使用库初始化的应用程序的说明,请参阅使用 C 库构建应用程序

可以重新实现 __rt_raise() 以进行错误和退出处理。 有关说明,请参阅调整错误信号、错误处理和程序退出

stdarg.h

此文件中列出的函数不需要进行任何库初始化或函数重新实现即可使用。

stddef.h

此文件不包含任何代码。 此文件中的定义不需要进行库初始化或函数重新实现。

stdint.h

此文件不包含任何代码。 此文件中的定义不需要进行库初始化或函数重新实现。

stdio.h

以下相关性或限制适用于这些函数:

  • 高级函数(如 printf()scanf()puts()fgets()fread()fwrite()perror())依赖于低级 stdio 函数 fgetc()fputc()__backspace()。 使用独立 C 库时,必须重新实现这些低级函数。

    但是,在使用独立 C 库时,无法重新实现带有 _sys_ 前缀的函数(如 _sys_read()),因为它们需要进行库初始化。

    有关详细信息,请参阅调整输入/输出函数

  • printf()scanf() 函数系列需要 locale

  • remove()rename() 函数是系统特有的函数,可能无法在您的应用程序中使用。

stdlib.h

此文件中的大多数函数不需要进行任何库初始化或函数重新实现即可使用。 以下函数依赖于正确实例化的其他函数:

  • ato*() 需要 locale

  • strto*() 需要 locale

  • malloc()calloc()realloc()free() 需要堆函数

  • 不使用 C 库构建应用程序时,将无法使用 atexit()

string.h

此文件中的函数不需要进行任何库初始化即可使用,但 strcoll()strxfrm() 例外,它们需要 locale

time.h

  • mktime()localtime() 可直接使用

  • time()clock() 是系统特有的函数,除非重新实现,否则可能无法使用这些函数。

  • asctime()ctime()strftime() 需要 locale

wchar.h

1994 年,标准附录 1 将宽字符库函数添加到 ISO C 中。

  • 支持宽字符输出和格式字符串:swprintf()vswprintf()swscanf()vswscanf()

  • 所有转换函数(如 btowcwctobmbrtowcwcrtomb)都需要 locale

  • wcscollwcsxfrm 需要 locale

wctype.h

1994 年,标准附录 1 将宽字符库函数添加到 ISO C 中。 这需要 locale

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0349AC
Non-Confidential