我需要知道C语言中的“Header”是什么意思?它是:什么是C语言头文件?
- 代码中的区域,如HTML代码中的标题区域(标题>或声明区域或定义区域或类型)?
- 或者它就像一个可以调用的函数(可以是:函数,子例程或范围或种类)。
我需要知道C语言中的“Header”是什么意思?它是:什么是C语言头文件?
标头是扩展名为.h的文件。 它旨在帮助编译器理解代码中使用的符号(方法,函数,结构,变量...)。在书的最后看到它就像一个词汇表。 它仅用于开发目的。 它帮助develloper知道什么功能可用,而无需查看所有的实现文件。就像一个手册页。
在谷歌搜索? http://www.tutorialspoint.com/cprogramming/c_header_files.htm :)
通常当在C中谈论“标题”时,含义是the #include
preprocessor directive包含的文件。这些被称为头文件文件。
它也可能是其他的东西,如源头顶部的注释(或头文件文件)可能是头。函数之前的注释可以是函数头。
或者当通过互联网读取数据文件或数据时,许多协议将数据拆分为标题和实际数据(例如见HTTP)。
什么是C标题语言学?
参照语言我说C头文件描述接口通过一个翻译单元,即伴随C文件提供。
“接口” 由
不是所有的上述需要成为其中的一部分一个C头。
从C语言的角度来看,C头文件是可选的,但按照惯例,它们预计会存在。
谢谢..但我需要“标题”只有头文件..看,当我们说的源代码,我们的意思是执行程序的语言,所以源文件是包含源代码的容器。现在我需要知道“Header”,那么头文件是一个包含“header”的容器。 –
标题是C程序员普遍接受的约定。
这是一个通常包含在C源文件中的.h文件,它提供了几个优点。
1.-提供数据类型,全局变量,常量和函数的声明。
因此,您不必一次又一次地重写它们。如果他们需要改变,你只需要在一个文件中改变它。
在这个例子中,由两个compliation单位(两个.c文件)组成的程序编译并运行得很好。
// File funcs.c
#include <stdio.h>
struct Position {
int x;
int y;
};
void print(struct Position p) {
printf("%d,%d\n", p.x, p.y);
}
// File main.c
struct Position {
int x;
int y;
};
int main(void) {
struct Position p;
p.x = 1; p.y = 2;
print(p);
}
但更mantainable有对struct Position
声明在头文件,只是#include
它无处不在,它是必要的,就像这样:
// File funcs.h
#ifndef FUNCS_H
#define FUNCS_H
struct Position {
int x;
int y;
};
#endif // FUNCS_H
//File funcs.c
#include <stdio.h>
#include "funcs.h"
void print(struct Position p) {
printf("%d,%d\n", p.x, p.y);
}
//File main.c
#include "funcs.h"
int main(void) {
struct Position p;
p.x = 1; p.y = 2;
print(p);
2:提供某种类型的安全。
C功能implicit declaration of functions。一个在C99中修复的“特征”(或者说是一种可论证的语言设计错误)。
考虑一下这个程序的两个.c文件组成:
//File funcs.c
#include<stdio.h>
int f(long n)
{
n = n+1;
printf("%ld\n", n);
}
// File main.c
int main(void)
{
f("a");
return 0;
}
与海湾合作委员会这个程序编译没有警告或错误。但不表现为,我们可以合理的期待和渴望:
[email protected] ~/t/tt $ gcc -o test *.c
[email protected] ~/t/tt $ ./test
4195930
使用头文件是这样的:
//File funcs.h
#ifndef FUNCS_H
#define FUNCS_H
int f(long n);
#endif // FUNCS_H
//File funcs.c
#include<stdio.h>
int f(long n) {
n = n+1;
printf("%ld\n", n);
}
// File main.c
#include"funcs.h"
int main(void) {
f("a");
return 0;
}
程序仍然编译和工程错误的,但至少我们得到一个警告:
[email protected] ~/t $ gcc -o test *.c
main.c: In function 'main':
main.c:5:5: warning: passing argument 1 of 'f' makes integer from pointer without a cast
f("a");
^
In file included from main.c:2:0:
funcs.h:3:5: note: expected 'long int' but argument is of type 'char *'
int f(long n);
^
[email protected] ~/t $ ./test
4195930
3.-提供一个公共接口,同时让实现细节保持隐藏状态。
当你设计你的程序时,最好使它成为模块化。这是为了确保它的不同部分(模块)尽可能地独立。所以,当你需要改变一个模块时,你不必担心影响其他模块的这种改变
头部有助于做到这一点,因为你在模块头部放置了数据结构,函数原型和常量这种模块的用户将会需要它。
实现细节进入.c文件。
这就是图书馆的工作方式。 API接口被指定并分布在头文件中。但API代码在.c文件中,不需要分发。作为库的用户,您只需要头文件和编译后的库,而不是源代码。
1+不只是提及“* interface *”。 :-) – alk
谢谢..但我只需要“Header”而不是头文件..看,当我们说源代码时,我们指的是执行程序的语言行,因此源文件是包含源代码的容器。现在我需要知道“Header”,那么头文件是一个包含“header”的容器。我需要明白这一点。 –
在编码约定下,我遵循所有的C头文件是C头文件,而所有的C头文件都是C头文件。因此,在这样的约定下,C头文件不是包含头的容器;该文件是标题。头文件(这是一个文件)包含类型,常量,变量和函数原型;它不包含标题,尽管它可能包含其他标题。 –
我不完全确定你在这里寻找什么样的答案。 “头文件”实际上并不是C语言中的一个正式的语言层次的概念,它只是关于如何使用'#include'的惯例。你在问那个约定是什么,或者#include是什么? –
只是一堆编译器的定义(指令),通常在'h'文件中声明。除非您明确声明变量或在该头文件中实现一个函数(这在概念上是错误的,应该避免),否则代码中的任何区域都不会生成这些指令。 –
@barakmanos:你也可以在头文件中有内联函数或宏。 –