欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
C/C++#include 機制簡(jiǎn)述

1.引言
做c/c++編程的對#include指令都不會(huì )陌生,絕大多數也都知道如何使用,但我相信仍有人對此是一知半解,
C:
#include <stdio.h>
C++:
#include <iostream>
表示包含C/C++標準輸入頭文件。包含指令不僅僅限于.h頭文件,可以包含任何編譯器能識別的C/C++代碼文件,包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以

2.名詞解釋
preprocess
預處理:為方便編譯器處理而設置的一種機制,包括一些常用預處理指令和語(yǔ)句,我們統稱(chēng)為預處理系統。
#include #define #if...#else...#endif #pragma
這些指令的實(shí)現是由編譯器來(lái)決定的(implementation specified)

提到預處理指令,順便說(shuō)一下頭文件防止重復包含的2種方法
a.保護宏(暫且稱(chēng)為Macro guard 宏衛兵?):
#ifndef _ABCDE_H
#define _ABCDE_H
/*
代碼部分
*/
#endif

在被包含過(guò)一次之后,宏_ABCDE_H已經(jīng)有了,下次再碰到就會(huì )略過(guò)從#define _ABCDE_H開(kāi)始到#endif之間的代碼
還有一種特定編譯器支持的指令:
b.#pragma once
能保證該文件(物理上的)只被編譯一次,也能起到防止重復包含的作用

但這2種方式是有區別的:
a.Macro guard可移植性好,絕大多數編譯器都支持,而且萬(wàn)一不小心拷貝了幾分相同的代碼也不會(huì )出問(wèn)題,但你得確保這個(gè)宏名不會(huì )與其他的宏沖突,否則等編譯器報出一大堆錯誤的時(shí)候你可能會(huì )覺(jué)得莫名其妙;
b.#pragma once指令簡(jiǎn)單,它能保證該文件(物理上的)只被編譯一次,不用去費勁的想不同的宏名,但如果有幾份該文件的拷貝,顯然起不到作用。

declaration
聲明:指將一個(gè)名稱(chēng)引入當前編譯單元,或者重新聲明一個(gè)前面已經(jīng)聲明過(guò)的名稱(chēng),聲明指定了如何解釋一個(gè)名稱(chēng)和該名稱(chēng)具有的屬性;
例如:
int main(void)
{
int a;  // 聲明了變量a,類(lèi)型為int
int *pa; // 聲明了變量pa,類(lèi)型為指向int型的指針類(lèi)型
}

definition
定義:除了以下情況,聲明就是定義
a.聲明函數但不包括函數體;
b.聲明包含extern鏈接限定符,例如:extern int a;
c.聲明既沒(méi)有初始化語(yǔ)法,也沒(méi)有函數體;
d.類(lèi)聲明中聲明靜態(tài)數據成員;
e.類(lèi)名字聲明;
f.typedef聲明;
g.using聲明或者using指令;
以上情況適用于C具有的特征,C++則完全適用,一般來(lái)說(shuō)定義要為其對象分配或預留存儲空間,而聲明則不用。
translation unit
編譯單元:一個(gè)源文件,.c .cpp等和它所包含的文件一起,在經(jīng)過(guò)預處理之后形成一個(gè)源碼文件,標準稱(chēng)之為translation unit(編譯單元)包括一系列的聲明和定義;一個(gè)program(程序)由一個(gè)或多個(gè)編譯單元組成。編譯器將各個(gè)翻譯單元編譯為目標代碼(.obj),通過(guò)連接器(linker)將這些編譯后的編譯單元(即目標代碼)連接成完整的指令序列(可執行文件、靜態(tài)庫、動(dòng)態(tài)庫等)。
one definition rule
一次定義規則:是指定義在所有進(jìn)入連接的編譯單元中只能有一次。

3.觀(guān)點(diǎn)、例子
A:頭文件只放聲明
example_a.h
void function();

example_a.cpp:
#include "example_a.h"
void function()
{}


B.被包含的文件可以使用任意擴展名:
只要是用符合標準的代碼編寫(xiě)的文本文件,就可以使用#include來(lái)進(jìn)行包含,包括.cpp .c等常見(jiàn)的源文件擴展名;
example_b_1.b
void function();

example_b_1.cpp:
#include "example_b_1.b"
void function()
{}



example_b_2.b
void function1();
void function2();



example_b_21.cpp:
void function1()
{}



example_b_22.cpp:
#include "example_b_1.b"
#include "example_b_21.cpp"
void function2()
{}


上面的例子中,example_b_21.cpp僅被包含在xample_b_22.cpp中,不再被其他的文件包含,而且不加入工程中;

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

4.總結
既然是經(jīng)常使用的東西,我們就應該明白它的原理,減少編程時(shí)的困惑,提高編程的效率。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
gcc/g++編譯器的安裝與說(shuō)明
.c和.h文件的區別
extern "C" - C基礎 - 石頭
#ifdef _cplusplus
預編譯和預編譯頭的概念以及使用
c++ 與 matlab 混編
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久