在stdlib.h,stdio.h中引用所有函数和常量?

时间:2018-05-23 10:51:08

标签: c

我想查找C库中定义的所有函数,常量和类型:stdlib.hstdio.hctype.h等等。所以,在C程序中我执行:#include <stdlib.h>#include <stdio.h>我想知道我得到的所有函数,常量和类型是什么?

在计算机上本地最简单的方法 ?我对在线参考文献并不感兴趣,特别是如果它们不是正式的。

是否有一个联机帮助页列出了例如stdlib的内容?也许GNU info程序有这方面的文档吗?或者我必须找到一个实际的头文件并查找它?

我更喜欢通用方法,但如果系统不同,我很想知道如何在Mac和Linux上做到这一点?

2 个答案:

答案 0 :(得分:2)

您的术语stdlib没有明确定义。有一个“标准I / O库”作为C编程语言的一部分,还有一个stdlib.h头文件。

对于C标识符,这里是ISO C and POSIX identifiers的概述。

除此之外,您可以使用

查看库文件中的符号
nm -AP /path/to/libfoobar.a

<强>更新

要检查编译器看到的表单中的标头,请查看预处理的结果(-E):

$ gcc -E /usr/include/stdlib.h|less
typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
[...]
typedef struct
  {
    int quot;
    int rem;
  } div_t;
typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;
[...]
extern long int random (void) __attribute__ ((__nothrow__ , __leaf__));
[...]

答案 1 :(得分:2)

当您包含一个标准C标头时,可以声明至少三种类型的标识符:

  • C标准指定的标识符。关于这些信息的权威来源是the C standard,以及您正在使用的C实现的文档。

  • C语言扩展的标识符。例如,标头可以声明POSIX函数的标识符。只有在您通过在包含标题之前定义某些预处理程序符号而请求它们时,标头才可以声明此类标识符。

  • C实现内部使用的标识符。这些标识符通常以下划线开头,后跟另一个下划线或封顶字母,因为C标准保留了这些标识符。您可以通过检查C实现中的实际头文件来发现这些标识符,但除非您的实现文档提供了它们,否则不应使用它们。

总的来说,如果你想知道C在标准头文件中提供了什么,你应该阅读C标准(用于权威信息)或一个好的C教科书(用于教程信息)。如果您想知道标题中还有其他内容,那么实现可以放入标题中的内容有很多种,因此查找内容的方法是阅读文档实现和/或检查头文件,然后找到它提供的额外内容的文档,例如POSIX documentation

您询问了计算机上的来源。您的C实现可能附带文档,Unix包含可通过man命令访问的文档。虽然您可以检查实际的头文件,但重要的是要了解头的当前内容并不构成对未来行为的任何承诺。在将来的版本中,任何内部标识符都可能会更改,标准标识符的行为可能会随着C标准的允许而发生变化。