偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C++ include機(jī)制基本概念詳解

開發(fā) 后端
剛剛接觸C++編程語言的朋友們今天可以通過這篇文章對(duì)C++ include機(jī)制的基本概念有一個(gè)詳細(xì)的了解。以方便大家對(duì)這方面知識(shí)的學(xué)習(xí)。

C++編程語言這樣的一個(gè)功能強(qiáng)大的語言中,有很多高深的內(nèi)容值得我們?nèi)ド钊氲难芯?。比如今天為大家介紹的C++ include機(jī)制就是其中一個(gè)比較難以理解的內(nèi)容。下面就讓我們一起來對(duì)此進(jìn)行解讀。

做c/c++編程的對(duì)#include指令都不會(huì)陌生,絕大多數(shù)也都知道如何使用,但我相信仍有人對(duì)此是一知半解

  1. C:  
  2. #include < stdio.h> 
  3. C++:  
  4. #include < iostream> 

表示包含C/C++標(biāo)準(zhǔn)輸入頭文件。包含指令不僅僅限于.h頭文件,可以包含任何編譯器能識(shí)別的C/C++代碼文件,包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以#t#

1.C++ include機(jī)制名詞解釋

預(yù)處理(preprocess)

為方便編譯器處理而設(shè)置的一種機(jī)制,包括一些常用預(yù)處理指令和語句,我們統(tǒng)稱為預(yù)處理系統(tǒng)。

如#include #define #if...#else...#endif #pragma等。這些指令的實(shí)現(xiàn)是由編譯器來決定的(implementation specified)提到預(yù)處理指令,順便說一下頭文件防止重復(fù)包含的2種方法

a.保護(hù)宏

  1. #ifndef _ABCDE_H  
  2. #define _ABCDE_H  
  3. /*  
  4. 代碼部分  
  5. */  
  6. #endif 

在被包含過一次之后,宏_ABCDE_H已經(jīng)有了,下次再碰到就會(huì)略過從#define _ABCDE_H開始到#endif之間的代碼
還有一種特定編譯器支持的指令:

  1. b.#pragma once 

能保證該文件(物理上的)只被編譯一次,也能起到防止重復(fù)包含的作用

但這2種方式是有區(qū)別的:

a.Macro guard可移植性好,絕大多數(shù)編譯器都支持,而且萬一不小心拷貝了幾分相同的代碼也不會(huì)出問題,但你得確保這個(gè)宏名不會(huì)與其他的宏沖突,否則等編譯器報(bào)出一大堆錯(cuò)誤的時(shí)候你可能會(huì)覺得莫名其妙;

b.#pragma once指令簡單,它能保證該文件(物理上的)只被編譯一次,不用去費(fèi)勁的想不同的宏名,但如果有幾份該文件的拷貝,顯然起不到作用。

 

聲明(declaration)

指將一個(gè)名稱引入當(dāng)前編譯單元,或者重新聲明一個(gè)前面已經(jīng)聲明過的名稱,聲明指定了如何解釋一個(gè)名稱和該名稱具有的屬性;
例如:

  1. int main(void)  
  2. {  
  3. int a; // 聲明了變量a,類型為int  
  4. int *pa; // 聲明了變量pa,類型為指向int型的指針類型  

 

 

 

定義(definition)

除了以下情況,聲明就是定義

a.聲明函數(shù)但不包括函數(shù)體;

b.聲明包含extern鏈接限定符,例如:extern int a;

c.聲明既沒有初始化語法,也沒有函數(shù)體;

d.類聲明中聲明靜態(tài)數(shù)據(jù)成員;

e.類名字聲明;

f.typedef聲明;

g.using聲明或者using指令;

以上情況適用于C具有的特征,C++則完全適用,一般來說定義要為其對(duì)象分配或預(yù)留存儲(chǔ)空間,而聲明則不用。

編譯單元(translation unit)

一個(gè)源文件,.c .cpp等和它所包含的文件一起,在經(jīng)過預(yù)處理之后形成一個(gè)源碼文件,標(biāo)準(zhǔn)稱之為translation unit(編譯單元)包括一系列的聲明和定義;一個(gè)program(程序)由一個(gè)或多個(gè)編譯單元組成。編譯器將各個(gè)翻譯單元編譯為目標(biāo)代碼(.obj), 通過連接器(linker)將這些編譯后的編譯單元(即目標(biāo)代碼)連接成完整的指令序列(可執(zhí)行文件、靜態(tài)庫、動(dòng)態(tài)庫等)。

一次定義規(guī)則(one definition rule)

是指定義在所有進(jìn)入連接的編譯單元中只能有一次。

 

 

2.C++ include機(jī)制觀點(diǎn)、例子

A:頭文件只放聲明

  1. example_a.h  
  2. void function();  
  3. example_a.cpp:  
  4. #include "example_a.h"  
  5. void function()  
  6. {} 

 

 

B.標(biāo)準(zhǔn)頭文件的使用

最新的C++標(biāo)準(zhǔn)庫中的一切內(nèi)容都被放在名字空間std中(名字空間中的內(nèi)容對(duì)外是不可見的),但是帶來了一個(gè)新問 題,無數(shù)現(xiàn)有的C++代碼都依賴于使用了多年的偽標(biāo)準(zhǔn)庫中的功能,如聲明在< iostream.h>等頭文件中的功能,使用std包裝標(biāo)準(zhǔn)庫 導(dǎo)致現(xiàn)有代碼的不可用,為了兼容這種情況,標(biāo)準(zhǔn)委員會(huì)為包裝了std的那部分標(biāo)準(zhǔn)庫創(chuàng)建了新的頭文件,新的頭文件的文件名與舊的一樣,只是沒有.h這個(gè)后 綴,如< iostream.h>就變成了< iostream>。對(duì)于C頭文件,采用同樣的方法,但還在每個(gè)頭文件名前加了字符 c,如< string.h>就變成了< cstring>,< stdio.h>變成了< cstdio>。 最好使用新的文件頭,使用新的文件頭的C++程序,需要使用using namespace std或者using namespace std::指定的類名,等方法來使需要的類對(duì)于我們的代碼可視。

3.總結(jié)

既然是經(jīng)常使用的東西,我們就應(yīng)該明白它的原理,減少編程時(shí)的困惑,提高編程的效率。以上就是對(duì)C++ include機(jī)制的相關(guān)介紹。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-06 14:04:58

C++內(nèi)存使用機(jī)制

2010-02-02 10:33:22

C++引用

2010-02-01 17:24:41

C++循環(huán)語句

2010-02-03 13:22:07

C++時(shí)間

2010-02-05 12:57:20

C++ kdevelo

2010-02-03 11:11:18

C++類型轉(zhuǎn)換

2010-02-02 13:41:01

C++類繼承

2010-02-03 14:36:47

C++仿函數(shù)

2010-02-04 13:56:24

C++類模板特化

2010-02-05 17:34:37

C++函數(shù)模板

2010-02-04 10:08:00

C++靜態(tài)成員函數(shù)

2010-02-01 14:07:12

C++多態(tài)性

2010-07-12 09:43:38

Symbian開發(fā)

2009-12-29 18:29:09

Silverlight

2010-02-23 16:32:29

WCF服務(wù)

2010-02-04 17:39:48

C++字符串類型

2010-02-06 15:58:10

C++集合初始化

2010-02-04 17:32:43

C++中C風(fēng)格字符串

2009-12-21 15:33:07

WCF集合元素

2010-02-24 17:17:04

WCF宿主環(huán)境
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)