我需要知道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:你也可以在頭文件中有內聯函數或宏。 –