程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話編程入門之法式頭文件的扼要解析

C說話編程入門之法式頭文件的扼要解析

編輯:關於C++

C說話編程入門之法式頭文件的扼要解析。本站提示廣大學習愛好者:(C說話編程入門之法式頭文件的扼要解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話編程入門之法式頭文件的扼要解析正文


頭文件是擴大名為.h的文件,個中包括C函數的聲明和宏界說,也能夠多個源文件之間同享。有兩品種型的頭文件:法式員編寫的文件,和編譯器中附帶的文件。

請求應用頭文件的法式,包含經由過程它,應用C說話預處置指令#include就像所看到的包括stdio.h頭文件,它跟著編譯器自帶。

包含一個頭文件等於復制頭文件的內容,但我們不如許做,由於這很輕易失足,一個好主張是我們不復制頭文件的內容,特殊是包含多個法式的源文件。

在C或C++法式的簡略做法是,我們把一切的常量,宏全體系全局變量和函數原型在頭文件,個中包含只需它請求包括頭文件。

包含/函語法
用戶和體系頭文件應用預處置指令#include包含在內。它有以下兩種情勢:

#include <file>

這類情勢被用於體系頭文件。它會搜刮體系目次的尺度列表中指定的文件的文件。可以在後面加上目次到這個列表-I選項在編譯源代碼。

#include "file"

這類情勢是用於本身的法式的頭文件。它會搜刮包括以後文件的目次中的文件定名的文件。可以在後面加上目次到這個列表-I選項在編譯源代碼。

包含/函操作
#include指令的任務道理是指點C預處置器應用以後的源文件的其他部門,然後再持續掃描指定的文件作為輸出。從預處置器的輸入包括後跟來自於#include指令後的文本的輸入已生成輸入,隨後從所包括的文件所得的輸入。例如,假如有一個頭文件 header.h 以下:

char *test (void);

主法式挪用應用頭文件,相似 program.c 如許:

int x;
#include "header.h"

int main (void)
{
  puts (test ());
}

編譯器會看到異樣數據流,由於它會假如program.c讀取

int x;
char *test (void);

int main (void)
{
  puts (test ());
}

一次性頭文件
假如頭文件正好被包括兩次,編譯器將處置它的內容兩次,將招致一個毛病。應用尺度辦法以避免包抄文件的全體內容在一個前提,是如許的:

#ifndef HEADER_FILE
#define HEADER_FILE

the entire header file file

#endif

此構建體平日被稱為包裝#ifndef。當該頭被再次包括,前提將是假的,由於HEADER_FILE界說。預處置器將跳過該文件的全體內容,而編譯器不會看到它的兩次。

盤算包函
有時,有需要選擇的幾個分歧的一個頭文件被包括到法式中。它們能夠會指定的設置裝備擺設參數被用於對分歧類型的操作體系,例如。可以用一系列前提句做到這一點,以下所示:

 #if SYSTEM_1
  # include "system_1.h"
#elif SYSTEM_2
  # include "system_2.h"
#elif SYSTEM_3
  ...
#endif

然則,跟著它的內容增加就會變得單調有趣,取代預處置器供給了應用宏的頭文件名。這就是所謂的盤算包含。而不是寫一個頭文件名#include直接參數,只需把宏的名字取代:

 #define SYSTEM_H "system_1.h"
 ...
 #include SYSTEM_H

SYSTEM_H將被擴大,而預處置器將尋覓system_1.h似乎的#include曾經寫了本來的方法。 SYSTEM_H可以經由過程Makefile -D選項界說。


關於頭文件反復包括
1、假如頭文件A包括頭文件C,同時頭文件B也包括頭文件C,而寫的法式中包括了頭文件A,頭文件B,然後在編譯的時刻就會湧現頭文件C反復包括的毛病
這個毛病 只需在本身寫的頭文件中如許寫

#ifndef X  //X為你的標識符,堅持獨一,可以長點,好比 #ifndef _INCLUDE_XXXXXX_H_
#define X

//這裡是你的頭文件

#endif

下面的X可以隨意取名(可以用來“裝”頭文件,所以X普通取名為年夜寫的頭文件的名字,只不外把"."換成“_”),只需包管#ifndef和#define前面是統一個X便可以了,只是一個標識罷了。翻譯成中文就是,假如曾經#define X了,前面的就不履行了。如許在統一個c文件中,包管可以只#include一個頭文件,防止“在統一個c文件中對一個頭文件include兩次”的毛病(第一次包括了該頭文件後,就曾經#define 了一次X,第二次包括時會碰到“#ifndef X”的斷定,既然曾經界說,只好對這個斷定說yes了,前面的不再履行,
頭文件就不會再加出來)。

2、寫的代碼裡, 頭文件A須要包括頭文件B,頭文件B須要包括頭文件C,這類情形#include A就沒有成績,不會湧現反復包括的毛病

留意:這裡的#ifndef預處置是要處理在統一個c文件中包括了兩次統一個頭文件的毛病,而在分歧的c文件中是可以包括統一個頭文件的。

假如不消#ifndef來仇人文件做標志,又想“與日俱增”地處理成績,不須要擔憂反復包括,則就要構成自發,不要在頭文件裡界說變量或函數,只聲明,如許屢次include這個頭文件時包括的都是聲明,就沒有成績,是以c說話裡是許可屢次聲明統一個函數或變量的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved