解析C 程式設計中的 include和條件編譯

2022-10-04 02:03:08 字數 2717 閱讀 2338

檔案包含的作用

所謂「檔案包含」處理是指乙個原始檔可以將另外乙個原始檔的全部內容包含進來,即將另外的檔案包含到本檔案之中。c++提供了#include命令用來實現「檔案包含」的操作。如在file1.cpp中有以下程式設計客棧#include命令:

#include ″file2.cpp″

它的作用見圖示意。

「檔案包含」命令是很有用的,它可以節省程式設計人員的重複勞動。

#include命令的應用很廣泛,絕大多數c++程式中都包括#include命令。現在,庫函式的開發者把這些資訊寫在乙個檔案中,使用者只需將該檔案「包含」進來即可(如呼叫數學函式的,應包含cm程式設計客棧at**件—),這就大大簡化了程式,寫一行#include命令的作用相當於寫幾十行、幾百行甚至更多行的內容。這種常www.cppcns.com用在檔案頭部的被包含的檔案稱為「標題檔案」或「頭部檔案」。

標頭檔案一般包含以下幾類內容:

不同的標頭檔案包括以上不同的資訊,提供給程式設計者使用,這樣,程式設計者不需自己重複書寫這些資訊,只需用一行#include命令就把這些資訊包含到本檔案了,大大地提高了程式設計效率。由於有了#include命令,就把不同的檔案組合在一起,形成乙個檔案。因此說,標頭檔案是原始檔之間的介面。

include命令的兩種形式

在#include命令中,檔名除了可以用尖括號括起來以外,還可以用雙撇號括起來。#include命令的一般形式為:

#include 檔名》

或    #include ″檔名″

如:    #include

或    #include ″iostream″

都是合法的。二者的區別是: 用尖括號時,系統到系統目錄中尋找要包含的檔案,如果找不到,編譯系統就給出出錯資訊。

有時被包含的檔案不一定在系統目錄中,這時應該用雙撇號形式,在雙撇號中指出檔案路徑和檔名。

如果在雙撇號中沒有給出絕對路徑,如#inclu程式設計客棧de ″file2.c″則預設指使用者當前目錄中的檔案。系統先在使用者當前目錄中尋找要包含的檔案,若找不到,再按標準方式查詢。如果程式中要包含的是使用者自己編寫的檔案,宜用雙撇號形式。

對於系統提供的標頭檔案,既可以用尖括號形式,也可以用雙撇號形式,都能找到被包含的檔案,但顯然用尖括號形式更直截了當,效率更高。

關於c++標準庫

在c++編譯系統中,提供了許多系統函式和巨集定義,而對函式的宣告則分別存放在不同的標頭檔案中。如果要呼叫某乙個函式,就必須用#include命令將有關的標頭檔案包含進來。c++的庫除了保留c的大部分系統函式和巨集定義外,還增加了預定義的模板和類。但是不同c++庫的內容不完全相同,由各c++編譯系統自行決定。不久前推出的c++標準將庫的建設也納入標準,規範化了c++標準庫,以便使c++程式能夠在不同的c++平台上工作,便於互相移植。新的c++標準庫www.cppcns.com中的標頭檔案一般不再包括字尾.h,例如:

#include

但為了使大批已有的c程式能繼續使用,許多c++編譯系統保留了c的標頭檔案,即提供兩種不同的標頭檔案,由程式設計者選用。如:

#include //c形式的標頭檔案

#include //c++形式的標頭檔案

效果基本上是一樣的。建議盡量用符合c++標準的形式,即在包含c++標頭檔案時一般不用字尾。如果使用者自己編寫標頭檔案,可以用.h為字尾。

c++條件編譯#ifdef #else

一般情況下,在進行編譯時對源程式中的每一行都要編譯。但是有時希望程式中某一部分內容只在滿足一定條件時才進行編譯,也就是指定對程式中的一部分內容進行編譯的條件。如果不滿足這個條件,就不編譯這部分內容。這就是「條件編譯」。

有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。

條件編譯命令常用的有以下形式:

1) #ifdef 識別符號

程式段1

#else

程式段2

#endif

它的作用是當所指定的識別符號已經被#define命令定義過,則在程式編譯階段只編譯程式段1,否則編譯程式段2。#endif用來限定#ifdef命令的範圍。其中#else部分也可以沒有。

2) #if 表示式

程式段1

#else

程式段2

#endif

它的作用是當指定的表示式值為真(非零)時就編譯程式段1,否則編譯程式段2。可以事先給定一定條件,使程式在不同的條件下執行不同的功能。

【例】在除錯程式時,常常希望輸出一些所需的資訊,而在除錯完成後不再輸出這些資訊,可以在源程式中插入條件編譯段。下面是乙個簡單的示例。

#include

using namespace std;

#define run //在除錯程式時使之成為注釋行

int main( )

{ int x=1, y=2, z=3;

#ifndef run //本行為條件編譯命令

cout<

第3行用#define命令的目的不在於用run代表乙個字串,而只是表示已定義過run,因此run後面寫什麼字串都無所謂,甚至可以不寫字串。在除錯程式時去掉第3行(或在行首加//,使之成為注釋行),由於無此行,故未對run定義,第6行據此決定編譯第7行,執行時輸出x,y,z的值,以便使用者分析有關變數當前的值。執行程式輸出:

x=1, y=2, z=3

x*y*z=6

在除錯完成後,在執行之前,加上第3行,重新編譯,由於此時run已被定義過,則該cout語句不被編譯,因此在執行時不再輸出x,y,z的值。運**況為:

x*y*z=6

本文標題: 解析c++程式設計中的#include和條件編譯

本文位址:

關於C語言程式設計中include的用法

1 iostream與iostream.h的區別 include 這個就是1998年標準化以後的標準標頭檔案 include 這個就是標準化以前的標頭檔案 更本質上的區別就是iostream把標準c 庫的元件放在乙個名位std的namespace裡面。而相對的iostream.h則將這些標準 元件放...

關於C語言程式設計中include的用法

1 iostream與iostream.h的區別 include 這個就是1998年標準化以後的標準標頭檔案 include 這個就是標準化以前的標頭檔案 更本質上的區別就是iostream把標準c 庫的元件放在乙個名位std的namespace裡面。而相對的iostream.h則將這些標準 元件放...

C 中 include的問題

f0305.cpp 定義控制台應用程式的入口點。string長度可伸縮,比字元陣列靈活 通過字元指標操作字串,容易出錯。但string效能略遜於字元指標。include stdafx.h include iostream include include string 這是c 裡面的標頭檔案與c語言中...