www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]1禁止在頭文件中定義變量2禁止在extern “C”中包含頭文件,否則會(huì)導(dǎo)致extern “C”嵌套,嵌套太多導(dǎo)致編譯錯(cuò)誤3每個(gè)模塊提供多個(gè).c文件,在同一目錄下,目錄名為模塊名,并提供一個(gè).h文件4

1禁止在頭文件中定義變量

2禁止在extern “C”中包含頭文件,否則會(huì)導(dǎo)致extern “C”嵌套,嵌套太多導(dǎo)致編譯錯(cuò)誤

3每個(gè)模塊提供多個(gè).c文件,在同一目錄下,目錄名為模塊名,并提供一個(gè).h文件

4.如果一個(gè)模塊包含多個(gè)模塊,則每個(gè)模塊提供一個(gè).h文件名為子模塊名

5.頭文件排版方式:1.按字母升序

??????????????????????????? ?2.將不穩(wěn)定(常修改)的放在前面

6.一個(gè)函數(shù)僅完成一項(xiàng)功能。重復(fù)代碼盡量寫成函數(shù)

7.避免函數(shù)過程,最好不超過50行。

8.代碼嵌套不超過4層

9.函數(shù)不變參數(shù)要寫為const

10.避免使用全局變量和靜態(tài)變量

11.函數(shù)參數(shù)個(gè)數(shù)不超過5個(gè)。檢查參數(shù)的有效性(是否為NULL)

12.命名規(guī)則

l???????? unix風(fēng)格:每個(gè)單詞小寫,并用下劃線分開my_name

l???????? windows風(fēng)格:每個(gè)單詞首字母大寫 MyName

l???????? 文件命名采用小寫字符

l???????? 全局變量g_??? 靜態(tài)變量s_

(5)宏:大寫單詞_大寫單詞

13:將宏定義的放在大括號(hào)內(nèi)

14:用const替代宏定義

15.inline函數(shù)的優(yōu)點(diǎn):

l???????? 編譯時(shí)不用展開,代碼Size小,

l???????? 可以加斷電,易于定位問題。例如對(duì)于引用計(jì)數(shù)加減的時(shí)候

l???????? 編譯時(shí)編譯器做語法檢查

16.注釋在代碼上面(用空行隔開)或右邊

?

17

文件頭注釋:

/**

*@file?? ?????? 文件名

*@brief?? ???? 功能描述

*@version? ?版本

*@author?????? ?? ?作者

*@date ? ????創(chuàng)建日期

*/

?

函數(shù)頭注釋:

/**

*@descriotion

*@param a

*@param b

*@return c

*/

?

18程序塊采用縮進(jìn)風(fēng)格編寫,每級(jí)縮進(jìn)為4個(gè)空格。

19相對(duì)獨(dú)立的程序塊之間、變量說明之后必須加空行

20.一條語句不能過長,拆分

l???????? 換行時(shí)要增加一級(jí)縮進(jìn)

l???????? 低優(yōu)先級(jí)操作符處劃分新行;換行時(shí)操作符應(yīng)該放下來放在新行首

l???????? 換行時(shí)一個(gè)完整的語句放在一行

l???????? 一行只寫一條語句

21.兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對(duì)等操作時(shí),操作符前后應(yīng)該加空格

l???????? 符號(hào)、操作符后面加空格

l???????? if、for、while、switch后加空格。

l???????? !、~、++、--、&后不加空格

l???????? 注釋符與注釋內(nèi)容之間加空格

?

22一組相關(guān)的整數(shù)用enum

23.不相關(guān)的常量,即使取值相同,也必須分別定義

24變量使用時(shí)才聲明并初始化

25.避免構(gòu)造函數(shù)做復(fù)雜的初始化,

可以使用init函數(shù)():

l???????? 需要提供初始化返回信息

l???????? 數(shù)據(jù)成員初始化可能拋異常

l???????? 數(shù)據(jù)成員初始化失敗會(huì)造成該類對(duì)象初始化失敗,引起不確定狀態(tài)

l???????? 數(shù)據(jù)成員初始化依賴this指針:構(gòu)造函數(shù)沒結(jié)束,對(duì)象就沒有構(gòu)造出來,構(gòu)造函數(shù)內(nèi)不能使用this成員

l???????? 數(shù)據(jù)初始化需要調(diào)用虛函數(shù)。在構(gòu)造函數(shù)和西溝函數(shù)中調(diào)用虛函數(shù),會(huì)導(dǎo)致未定義行為。

26初始化列表嚴(yán)格按照成員聲明順序初始化

27.使用c++風(fēng)格的類型轉(zhuǎn)換

const_cast 移除const屬性的轉(zhuǎn)換。避免使用

dynamic_cast下行轉(zhuǎn)換,基類指針轉(zhuǎn)換為子類指針。類型檢查,建議調(diào)試代碼中使用

static_cast 一般的強(qiáng)制轉(zhuǎn)換

reinterpret_cast 轉(zhuǎn)換不相關(guān)的類型,避免使用。

28.內(nèi)聯(lián)函數(shù)小于10行。且不要有循環(huán)、遞歸、虛函數(shù)。內(nèi)聯(lián)函數(shù)在頭文件中聲明

29.盡量用const引用取代指針。引用比指針安全,一定非空,一定不會(huì)指向其他目標(biāo)。不需要檢查非法NULL指針

30,一定要寫構(gòu)造函數(shù)。

構(gòu)造函數(shù)參數(shù)列表的初始化

Message():

a(0),

b(“”),

c(NULL)

{
}

30.如果不定義構(gòu)造、拷貝、賦值、析構(gòu)等。編譯器會(huì)自動(dòng)生成。

默認(rèn)的構(gòu)造和賦值函數(shù)只是將元對(duì)象的成員簡單賦值給目的對(duì)象,即淺拷貝(shallow copy)。使元對(duì)象和目的對(duì)象的成員指向同一內(nèi)存,導(dǎo)致資源重復(fù)釋放。自動(dòng)生產(chǎn)的析構(gòu)函數(shù)是空的,不能釋放已盛情的堆內(nèi)存。如果不需要拷貝夠咱函數(shù)和賦值函數(shù),將其聲明為private

31..讓operator=返回*this的引用,使之能連等。并檢查是否是自賦值

String&String::operator=(const String &rhs)

{

???? If(this!=&rhs)

{

???????? delete [] data;

???????? data=new char[strlen(rhs.data)+1];

???????? strcpy(data,rhs.data);

}

return *this;

}

?

32基類指針執(zhí)行刪除操作時(shí),基類的析構(gòu)函數(shù)設(shè)為共有虛擬的。保障派生類析構(gòu)函數(shù)被調(diào)用

33虛函數(shù)不使用默認(rèn)參數(shù),因?yàn)槭莿?dòng)態(tài)綁定的,而默認(rèn)參數(shù)是編譯時(shí)靜態(tài)綁定的,所以最終執(zhí)行的函數(shù)是一個(gè)定義在派生類,但卻使用了基類的默認(rèn)參數(shù)值的虛函數(shù)

?

class A

{

?

public:

?? virtual void display(const string& str="Base")

?? {

????? cout<<str<<endl;

?? }

};

class B:public A

{

public:

?? virtual void display(const string& str="Derived")

?? {

?? cout<<str<<endl;

?? }

};

?

A* a=new B();

a->display();//調(diào)用派生類display,調(diào)用基類默認(rèn)形參,輸出Base,

delete a;

a=NULL;

?

34.絕不重新定義(隱藏)繼承而來的非虛函數(shù)。因?yàn)闊o法動(dòng)態(tài)綁定

35.避免派生類中定義與基類同名但參數(shù)類型不同的函數(shù),引起虛函數(shù)調(diào)用失敗

36.派生類重定義的虛函數(shù)也要聲明virtual

37.僅在輸入?yún)?shù)類型不同個(gè),功能相同時(shí)重載函數(shù)

?

38建議4.7 使用重載以避免隱式類型轉(zhuǎn)換

說明:隱式轉(zhuǎn)換常常創(chuàng)建臨時(shí)變量;如果提供類型精確匹配的重載函數(shù),不會(huì)導(dǎo)致轉(zhuǎn)換。

示例:

class String?

{

??? //…

??? String( const char* text );????? //允許隱式轉(zhuǎn)換

};

bool operator==( const String&, const String& );

//…代碼中某處…

if( someString == "Hello" ) {... }

上述例子中編譯器進(jìn)行隱式轉(zhuǎn)換,好像someString == String( "Hello")一樣,形成浪費(fèi),因?yàn)椴⒉恍?/p>

要拷貝字符。使用操作符重載即可消除這種隱式轉(zhuǎn)換:

bool operator==( const String& lhs, const String& rhs );???? //#1

bool operator==( const String& lhs, const char* rhs );?????? //#2

bool operator==( const char* lhs, const String& rhs );?????? //#3

?

39使用名字空間進(jìn)行歸類,避免符號(hào)沖突cout<<space_a::a+space_b::a;

40不要在頭文件中或者#include之前使用using指示符

?

41不要在extern "C"內(nèi)部使用#include包含其他頭文件

在C++代碼中調(diào)用C的庫文件,需要用extern "C"來告訴編譯器:這是一個(gè)用C寫成的庫文件,用C的方式來鏈接它們。

嚴(yán)格的講,只應(yīng)該把函數(shù)、變量以及函數(shù)類型這三種對(duì)象放置于extern "C"的內(nèi)部。

如果把#include指令放在extern "C"里面,可能會(huì)導(dǎo)致extern "C"嵌套而帶來如下幾個(gè)風(fēng)險(xiǎn):

extern "C"嵌套過深,導(dǎo)致編譯錯(cuò)誤

extern "C"嵌套后,改變其他某些文件的編譯鏈接方式

?

42構(gòu)造函數(shù)初始化列表在同一行或按4格縮進(jìn)并排幾行

43類的聲明按照一定的次序和規(guī)范進(jìn)行。建議的次序如下:

?? 按照存取控制特性段排序:public、protected、private,如果沒有可以忽略。這個(gè)排序是讓聲

明的時(shí)候使用者首先看到最關(guān)心的特性(對(duì)外接口)。

?? 在每一段中按照如下順序聲明(先定義后續(xù)用到的類型,常量和enums;然后定義行為(構(gòu)造,析構(gòu),

成員函數(shù)),最后定義成員變量):

1.? typedefs和enums;

2. 常量;

3. 構(gòu)造函數(shù);

4. 析構(gòu)函數(shù);

5. 成員函數(shù),含靜態(tài)成員函數(shù);

6. 數(shù)據(jù)成員,含靜態(tài)數(shù)據(jù)成員。

?

44 使用‘//’注釋方式,而不是‘/* */',容易產(chǎn)生交叉錯(cuò)亂

?

45不直接使用C++的基本數(shù)據(jù)類型,不要假定其存儲(chǔ)尺寸長度

說明: C++標(biāo)準(zhǔn)沒有明確基本數(shù)據(jù)類型的大小與存儲(chǔ)格式,? 這些基本類型包括: short,? int, long, lo

long, float double等。這些基本數(shù)據(jù)類型在不同的編譯器中,實(shí)現(xiàn)有所不同,如:

long類型在32位編譯模式下為4字節(jié)長度,在64位編譯模式下為8字節(jié)長度。

所以建議不要直接使用基本數(shù)據(jù)類型。推薦如下兩種使用方式:

1、重定義基本數(shù)據(jù)類型

typedef int32_t int;

typedef int64_t long long;

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉