我是 C 语言的新手,想知道是否有一个通用头文件可以包含在 main function 的顶部。在 Java 中,只需在 eclipse 中执行 ctrl+shift+o 并为您导入包非常简单。但是在 C 中,我每次都必须谷歌并添加它。有时,我什至不知道要包含什么库。非常感谢你 。
7 回答
没有通用标题,但您当然可以为您的应用程序制作一个,并将其包含在您的所有文件中。如果您不确定要为需要调用的函数包含哪个文件,可以man
在 UNIX 上使用命令。例如,
man 3 printf
显示了这一点:
概要
#include <stdio.h> int printf(const char * restrict format, ...);
如果您使用它足够长的时间,您通常会相对较快地记住函数到标题的“映射”。
没有一个包罗万象的标题。
除此之外,任何这样的 MS Windows 头文件对于 Unix 都是错误的,而任何这样的 Unix 头文件对于 Windows 都是错误的。即使在 Unix 上,通用头文件是否应该包含所有 X11 头文件?那么 OpenSSL 标头呢?POSIX 线程头呢?其他 POSIX 标头?
您需要了解在哪里可以找到您需要使用的任何给定功能的信息。在 Unix 上,经典资源是“手册页”(意思是“手册页”,通常使用“ -man
”troff/nroff 宏包格式化)。这些天来,我倾向于使用网络:例如,我在 The Open Group 找到POSIX手册页。
(请注意,头文件与库是分开的;单个库中的函数可能使用许多头文件。请参阅标准 C 库作为说明。)
没有通用的标头——因为解析每个标头都需要时间,并且有数千个(如果不是数百万个)标头可用,因此无法将它们全部包含到每个编译单元中。你不会想要的,因为其中 99.9% 不会被使用,只会不必要地用静态分配使最终的可执行文件膨胀。
每个标准化函数都会告诉您需要在其联机帮助页顶部包含的标题;例如,来自malloc(3)
:
NAME
calloc, malloc, free, realloc - Allocate and free dynamic
memory
SYNOPSIS
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
因此,您需要#include <stdlib.h>
在您的项目中,并且有原型供您查看。
如果您想快速查看联机帮助页,可以配置 IDE 以快速向您显示它们。Kin的默认键绑定vim
是为光标下的函数加载手册页——但是,由于它使用默认的手册页搜索顺序,它有时会找到错误的页面。(printf
例如,在 上,它会加载printf(1)
而不是printf(3)
. 烦人。如果您愿意,可以使用中MANSECT
描述的环境变量来更改此行为以在之前向您显示。)man(1)
3
1
不。
我想您可以创建一个,但这会大大降低您的编译速度。一些 IDE 可能会帮助您找到包含文件。
您可以让 Eclipse 自动插入您经常使用的各种头文件。但是:如果您想学习 CI,建议您完成查找要包含哪些内容的工作。
就像所有的学习一样。边做边学——从重复中学习。
标准 C 库并没有那么大——头文件的命名很直观,并且有一个可管理的标准函数列表。
有一个这样的列表可用并阅读它。当您需要包含等时阅读它。
当你觉得你真的知道什么时候该包括什么时。自动化它。
您正在包含一个头文件,因为您使用的是头文件中定义的接口;不是因为有一套标准要包括在内。那么,你如何确定你需要什么接口呢?有两个基本选项:
- 查找头文件或头文件的描述并查看它们以了解接口,或者
- 使用“apropos search_term”或“man interface_function”。
作为初学者,选项#1 将是一个好的开始——查看/usr/include
或找到一本名为“C 标准库”(或类似内容)的书。