欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析C++編程中的#include和條件編譯

 更新時(shí)間:2015年09月11日 18:19:36   投稿:goldensun  
這篇文章主要介紹了解析C++編程中的#include和條件編譯,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

文件包含的作用

所謂“文件包含”處理是指一個(gè)源文件可以將另外一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來(lái),即將另外的文件包含到本文件之中。C++提供了#include命令用來(lái)實(shí)現(xiàn)“文件包含”的操作。如在file1.cpp中有以下#include命令:

  #include ″file2.cpp″

它的作用見(jiàn)圖示意。


“文件包含”命令是很有用的,它可以節(jié)省程序設(shè)計(jì)人員的重復(fù)勞動(dòng)。

#include命令的應(yīng)用很廣泛,絕大多數(shù)C++程序中都包括#include命令?,F(xiàn)在,庫(kù)函數(shù)的開(kāi)發(fā)者把這些信息寫(xiě)在一個(gè)文件中,用戶只需將該文件“包含”進(jìn)來(lái)即可(如調(diào)用數(shù)學(xué)函數(shù)的,應(yīng)包含cmath文件—),這就大大簡(jiǎn)化了程序,寫(xiě)一行#include命令的作用相當(dāng)于寫(xiě)幾十行、幾百行甚至更多行的內(nèi)容。這種常用在文件頭部的被包含的文件稱為“標(biāo)題文件”或“頭部文件”。

頭文件一般包含以下幾類內(nèi)容:

  • 對(duì)類型的聲明。
  • 函數(shù)聲明。
  • 內(nèi)置(inline)函數(shù)的定義。
  • 宏定義。用#define定義的符號(hào)常量和用const聲明的常變量。
  • 全局變量定義。
  • 外部變量聲明。如entern int a;
  • 還可以根據(jù)需要包含其他頭文件。

不同的頭文件包括以上不同的信息,提供給程序設(shè)計(jì)者使用,這樣,程序設(shè)計(jì)者不需自己重復(fù)書(shū)寫(xiě)這些信息,只需用一行#include命令就把這些信息包含到本文件了,大大地提高了編程效率。由于有了#include命令,就把不同的文件組合在一起,形成一個(gè)文件。因此說(shuō),頭文件是源文件之間的接口。
include命令的兩種形式

在#include命令中,文件名除了可以用尖括號(hào)括起來(lái)以外,還可以用雙撇號(hào)括起來(lái)。#include命令的一般形式為:
    #include <文件名>

    #include ″文件名″
如:
    #include <iostream>

    #include ″iostream″
都是合法的。二者的區(qū)別是: 用尖括號(hào)時(shí),系統(tǒng)到系統(tǒng)目錄中尋找要包含的文件,如果找不到,編譯系統(tǒng)就給出出錯(cuò)信息。

有時(shí)被包含的文件不一定在系統(tǒng)目錄中,這時(shí)應(yīng)該用雙撇號(hào)形式,在雙撇號(hào)中指出文件路徑和文件名。

如果在雙撇號(hào)中沒(méi)有給出絕對(duì)路徑,如#include ″file2.c″則默認(rèn)指用戶當(dāng)前目錄中的文件。系統(tǒng)先在用戶當(dāng)前目錄中尋找要包含的文件,若找不到,再按標(biāo)準(zhǔn)方式查找。如果程序中要包含的是用戶自己編寫(xiě)的文件,宜用雙撇號(hào)形式。

對(duì)于系統(tǒng)提供的頭文件,既可以用尖括號(hào)形式,也可以用雙撇號(hào)形式,都能找到被包含的文件,但顯然用尖括號(hào)形式更直截了當(dāng),效率更高。
關(guān)于C++標(biāo)準(zhǔn)庫(kù)

在C++編譯系統(tǒng)中,提供了許多系統(tǒng)函數(shù)和宏定義,而對(duì)函數(shù)的聲明則分別存放在不同的頭文件中。如果要調(diào)用某一個(gè)函數(shù),就必須用#include命令將有關(guān)的頭文件包含進(jìn)來(lái)。C++的庫(kù)除了保留C的大部分系統(tǒng)函數(shù)和宏定義外,還增加了預(yù)定義的模板和類。但是不同C++庫(kù)的內(nèi)容不完全相同,由各C++編譯系統(tǒng)自行決定。不久前推出的C++標(biāo)準(zhǔn)將庫(kù)的建設(shè)也納入標(biāo)準(zhǔn),規(guī)范化了C++標(biāo)準(zhǔn)庫(kù),以便使C++程序能夠在不同的C++平臺(tái)上工作,便于互相移植。新的C++標(biāo)準(zhǔn)庫(kù)中的頭文件一般不再包括后綴.h,例如:

  #include <string>

但為了使大批已有的C程序能繼續(xù)使用,許多C++編譯系統(tǒng)保留了C的頭文件,即提供兩種不同的頭文件,由程序設(shè)計(jì)者選用。如:

  #include <iostream.h> //C形式的頭文件
  #include <iostream> //C++形式的頭文件


效果基本上是一樣的。建議盡量用符合C++標(biāo)準(zhǔn)的形式,即在包含C++頭文件時(shí)一般不用后綴。如果用戶自己編寫(xiě)頭文件,可以用.h為后綴。

C++條件編譯#ifdef #else
一般情況下,在進(jìn)行編譯時(shí)對(duì)源程序中的每一行都要編譯。但是有時(shí)希望程序中某一部分內(nèi)容只在滿足一定條件時(shí)才進(jìn)行編譯,也就是指定對(duì)程序中的一部分內(nèi)容進(jìn)行編譯的條件。如果不滿足這個(gè)條件,就不編譯這部分內(nèi)容。這就是“條件編譯”。

有時(shí),希望當(dāng)滿足某條件時(shí)對(duì)一組語(yǔ)句進(jìn)行編譯,而當(dāng)條件不滿足時(shí)則編譯另一組語(yǔ)句。

條件編譯命令常用的有以下形式:
1) #ifdef 標(biāo)識(shí)符
    程序段1
#else
    程序段2
#endif

它的作用是當(dāng)所指定的標(biāo)識(shí)符已經(jīng)被#define命令定義過(guò),則在程序編譯階段只編譯程序段1,否則編譯程序段2。#endif用來(lái)限定#ifdef命令的范圍。其中#else部分也可以沒(méi)有。

2) #if 表達(dá)式
    程序段1
#else
    程序段2
#endif

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

【例】在調(diào)試程序時(shí),常常希望輸出一些所需的信息,而在調(diào)試完成后不再輸出這些信息,可以在源程序中插入條件編譯段。下面是一個(gè)簡(jiǎn)單的示例。

#include <iostream>
using namespace std;
#define RUN //在調(diào)試程序時(shí)使之成為注釋行
int main( )
{
  int x=1, y=2, z=3;
  #ifndef RUN //本行為條件編譯命令
  cout<<"x="<<x<<", y="<<y<<", z="<<z<<"\n"; //在調(diào)試程序時(shí)需要輸出這些信息
  #endif //本行為條件編譯命令
  cout<<"x*y*z="<<x*y*z<<endl;
}

第3行用#define命令的目的不在于用RUN代表一個(gè)字符串,而只是表示已定義過(guò)RUN,因此RUN后面寫(xiě)什么字符串都無(wú)所謂,甚至可以不寫(xiě)字符串。在調(diào)試程序時(shí)去掉第3行(或在行首加//,使之成為注釋行),由于無(wú)此行,故未對(duì)RUN定義,第6行據(jù)此決定編譯第7行,運(yùn)行時(shí)輸出x,y,z的值,以便用戶分析有關(guān)變量當(dāng)前的值。運(yùn)行程序輸出:

  x=1, y=2, z=3
  x*y*z=6


在調(diào)試完成后,在運(yùn)行之前,加上第3行,重新編譯,由于此時(shí)RUN已被定義過(guò),則該cout語(yǔ)句不被編譯,因此在運(yùn)行時(shí)不再輸出x,y,z的值。運(yùn)行情況為:

x*y*z=6

相關(guān)文章

  • C語(yǔ)言共用體union作用使用示例教程

    C語(yǔ)言共用體union作用使用示例教程

    這篇文章主要為大家介紹了C語(yǔ)言共用體union作用的使用示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理

    C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)個(gè)人財(cái)務(wù)管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++控制臺(tái)繪圖頭文件實(shí)例代碼

    C++控制臺(tái)繪圖頭文件實(shí)例代碼

    控制臺(tái)(console)是電腦的最基本交互接口,通常包括鍵盤(pán)(keyboard)和屏幕(screen),下面這篇文章主要給大家介紹了關(guān)于C++控制臺(tái)繪圖頭文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • C++線性時(shí)間的排序算法分析

    C++線性時(shí)間的排序算法分析

    這篇文章主要介紹了C++線性時(shí)間的排序算法分析,是非常經(jīng)典的非比較排序算法,對(duì)于C++程序員有很大的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • 關(guān)于C語(yǔ)言和命令行之間的交互問(wèn)題

    關(guān)于C語(yǔ)言和命令行之間的交互問(wèn)題

    這篇文章主要介紹了C語(yǔ)言和命令行之間的交互,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • C++知識(shí)點(diǎn)之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)

    C++知識(shí)點(diǎn)之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)

    這篇文章主要給大家介紹了關(guān)于C++知識(shí)點(diǎn)之inline函數(shù)、回調(diào)函數(shù)和普通函數(shù)的相關(guān)使用方法,以及回調(diào)函數(shù)和普通函數(shù)的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言控制語(yǔ)句之 循環(huán)

    C語(yǔ)言控制語(yǔ)句之 循環(huán)

    C語(yǔ)言循環(huán)控制語(yǔ)句是一個(gè)基于C語(yǔ)言的編程語(yǔ)句,該語(yǔ)句主要有while循環(huán)語(yǔ)句、do-while循環(huán)語(yǔ)句和for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)循環(huán)結(jié)構(gòu),今天通過(guò)本文給大家分享C控制語(yǔ)句的相關(guān)知識(shí),需要的朋友參考下吧
    2021-07-07
  • C++的類型轉(zhuǎn)換(強(qiáng)轉(zhuǎn))你了解嗎

    C++的類型轉(zhuǎn)換(強(qiáng)轉(zhuǎn))你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的類型轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 詳解C++中類的六大默認(rèn)成員函數(shù)

    詳解C++中類的六大默認(rèn)成員函數(shù)

    這篇文章主要介紹了C++類中的六大默認(rèn)成員函數(shù)的原理雨使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Qt5.9繼承QObject創(chuàng)建多線程實(shí)例

    Qt5.9繼承QObject創(chuàng)建多線程實(shí)例

    本文主要介紹了Qt5.9繼承QObject創(chuàng)建多線程實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論