最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

文件包含的作用

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

  #include ″file2.cpp″

它的作用見圖示意。


“文件包含”命令是很有用的,它可以節(jié)省程序設計人員的重復勞動。

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

頭文件一般包含以下幾類內容:

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

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

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

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

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

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

如果在雙撇號中沒有給出絕對路徑,如#include ″file2.c″則默認指用戶當前目錄中的文件。系統(tǒng)先在用戶當前目錄中尋找要包含的文件,若找不到,再按標準方式查找。如果程序中要包含的是用戶自己編寫的文件,宜用雙撇號形式。

對于系統(tǒng)提供的頭文件,既可以用尖括號形式,也可以用雙撇號形式,都能找到被包含的文件,但顯然用尖括號形式更直截了當,效率更高。
關于C++標準庫

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

  #include <string>

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

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


效果基本上是一樣的。建議盡量用符合C++標準的形式,即在包含C++頭文件時一般不用后綴。如果用戶自己編寫頭文件,可以用.h為后綴。

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

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

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

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

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

它的作用是當指定的表達式值為真(非零)時就編譯程序段1,否則編譯程序段2??梢允孪冉o定一定條件,使程序在不同的條件下執(zhí)行不同的功能。

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

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

第3行用#define命令的目的不在于用RUN代表一個字符串,而只是表示已定義過RUN,因此RUN后面寫什么字符串都無所謂,甚至可以不寫字符串。在調試程序時去掉第3行(或在行首加//,使之成為注釋行),由于無此行,故未對RUN定義,第6行據(jù)此決定編譯第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++11中模板隱式實例化與顯式實例化的定義詳解分析

    C++11中模板隱式實例化與顯式實例化的定義詳解分析

    實例化是為在程序中的函數(shù)模板本身并不會生成函數(shù)定義,它只是一個用于生成函數(shù)定義的方案。編譯器使用模板為特定類型生成函數(shù)定義時,得到的是模板實例。這即是函數(shù)模板的實例化。而函數(shù)模板實例化又分為兩種類型:隱式實例化和顯式實例化
    2022-04-04
  • C語言進階之內存操作函數(shù)詳解

    C語言進階之內存操作函數(shù)詳解

    這篇文章主要為大家學習介紹了C語言中內存操作函數(shù)(memcpy、memmove和memcmp)的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-07-07
  • c++中移動語義和完美轉發(fā)及易錯點

    c++中移動語義和完美轉發(fā)及易錯點

    C++ 中的移動語義和完美轉發(fā)是 C++11 引入的兩個重要特性,它們分別用于提高性能和靈活性,這篇文章主要介紹了c++中移動語義和完美轉發(fā),需要的朋友可以參考下
    2023-09-09
  • 養(yǎng)成良好的C++編程習慣之內存管理的應用詳解

    養(yǎng)成良好的C++編程習慣之內存管理的應用詳解

    "養(yǎng)成良好的編程習慣"其實是相當綜合的一個命題,可以從多個角度、維度和層次進行論述和評判,如代碼的風格、效率和可讀性;模塊設計的靈活性、可擴展性和耦合度等等,要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面
    2013-05-05
  • C語言Iniparser庫實現(xiàn)ini文件讀寫

    C語言Iniparser庫實現(xiàn)ini文件讀寫

    iniparser是針對INI文件的解析器。ini文件則是一些系統(tǒng)或者軟件的配置文件。本文就來介紹一下如何利用Iniparser庫實現(xiàn)ini文件讀寫吧
    2023-03-03
  • C++如何去掉字符串首尾的空格

    C++如何去掉字符串首尾的空格

    這篇文章主要介紹了C++如何去掉字符串首尾的空格問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于C語言實現(xiàn)簡易的掃雷游戲

    基于C語言實現(xiàn)簡易的掃雷游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)簡易的掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言調試手段:鎖定錯誤的實現(xiàn)方法

    C語言調試手段:鎖定錯誤的實現(xiàn)方法

    本篇文章是對在C語言調試中,鎖定錯誤的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)信號槽的項目實踐

    C語言實現(xiàn)信號槽的項目實踐

    信號槽是觀察者模式的一種實現(xiàn),一個信號就是一個能夠被觀察的事件,本文主要介紹了C語言實現(xiàn)信號槽的項目實踐模具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C/C++時間庫chrono的使用總結

    C/C++時間庫chrono的使用總結

    std::chrono是C++標準庫中的一個組件,用于表示和處理時間,其功能就像是心理學中的感知系統(tǒng),它可以為我們捕捉、量化并操作抽象的時間概念,這就如同我們的大腦可以理解和感知周圍環(huán)境的時間流逝一樣,這種感知和理解能力是人類進行日?;顒铀匦璧?
    2023-12-12

最新評論

揭阳市| 建始县| 集贤县| 滨海县| 秦皇岛市| 买车| 鄂伦春自治旗| 永靖县| 义马市| 重庆市| 汉沽区| 芮城县| 满城县| 东辽县| 凤台县| 拉孜县| 文成县| 彭州市| 华容县| 台前县| 从化市| 太湖县| 铁岭市| 维西| 平遥县| 洛浦县| 利川市| 襄汾县| 锦屏县| 邵东县| 昌黎县| 深圳市| 卢龙县| 潍坊市| 宝山区| 蓬安县| 和静县| 全椒县| 重庆市| 金坛市| 临沭县|