代碼編程規(guī)范-擴(kuò)展(變量)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
前言
這篇重點(diǎn)介紹一下代碼編程規(guī)范的擴(kuò)展要求-變量規(guī)范要求
規(guī)范要求
【規(guī)范1】一個(gè)變量只有一個(gè)功能,不能把一個(gè)變量用作多種用途
一個(gè)變量只用來表示一個(gè)特定功能,不能把一個(gè)變量作多種用途,即同一變量取值不同時(shí),其代表的意義也不同
如,value在同一個(gè)函數(shù)中表示結(jié)果又表示次數(shù),在閱讀時(shí)增加了難度,所以這種做法是錯(cuò)的,正確的做法應(yīng)該定義兩個(gè)變量,分別表示不同含義
【規(guī)范2】結(jié)構(gòu)功能單一,不要設(shè)計(jì)面面俱到的數(shù)據(jù)結(jié)構(gòu)
相關(guān)的一組信息才是構(gòu)成一個(gè)結(jié)構(gòu)體的基礎(chǔ),結(jié)構(gòu)的定義應(yīng)該可以明確的描述一個(gè)對象,而不是一組相關(guān)性不強(qiáng)的數(shù)據(jù)的集合。設(shè)計(jì)結(jié)構(gòu)時(shí)應(yīng)力爭使結(jié)構(gòu)代表一種現(xiàn)實(shí)事務(wù)的抽象,而不是同時(shí)代表多種。結(jié)構(gòu)中的各元素應(yīng)代表同一事務(wù)的不同側(cè)面,而不應(yīng)把描述沒有關(guān)系或關(guān)系很弱的不同事務(wù)的元素放到同一結(jié)構(gòu)中
【規(guī)范 3】不用或者少用全局變量
單個(gè)文件內(nèi)部可以使用static的全局變量,可以將其理解為類的私有成員變量。
全局變量應(yīng)該是模塊的私有數(shù)據(jù),不能作用對外的接口使用,使用static類型定義,可以有效防止外部文件的非正常訪問。
若該模塊內(nèi)需要定義多個(gè)全局變量,可以統(tǒng)一整合成一個(gè)結(jié)構(gòu)體句柄,在使用或者調(diào)試時(shí)會十分方便。
【規(guī)范4】防止局部變量與全局變量同名
雖然同名沒有語法錯(cuò)誤,但是函數(shù)會優(yōu)先使用局部變量,同時(shí)增加閱讀難度
一般情況下,通過使用變量命名規(guī)范后,局部變量與全局變量同名基本不存在,最大前綴不同
【規(guī)范 5】變量在定義時(shí)就需要初始化
原因:若定義時(shí)沒有初始化可能在一定條件下使用時(shí)出現(xiàn)錯(cuò)誤,不利于后面排查問題
【規(guī)范6】嚴(yán)禁使用未經(jīng)初始化的變量作為右值
在首次使用前初始化變量,初始化的地方離使用的地方越近越好。
【規(guī)范 7】構(gòu)造僅有一個(gè)模塊或函數(shù)可以修改、創(chuàng)建,而其余有關(guān)模塊或函數(shù)只訪問的全局變量,防止多個(gè)不同模塊或函數(shù)都可以修改、創(chuàng)建同一全局變量的現(xiàn)象
降低全局變量耦合度
【規(guī)范8】使用面向接口編程思想,通過 API 訪問數(shù)據(jù):如果本模塊的數(shù)據(jù)需要對外部模塊開放 ,應(yīng)提供接口函數(shù)來設(shè)置、獲取,同時(shí)注意全局?jǐn)?shù)據(jù)的訪問互斥
避免直接暴露內(nèi)部數(shù)據(jù)給外部模型使用,是防止模塊間耦合最簡單有效的方法。定義的接口應(yīng)該有比較明確的意義,比如一個(gè)風(fēng)扇管理功能模塊,有自動和手動工作模式,那么設(shè)置、查詢工作模塊就可以定義接口為SetFanWorkMode,GetFanWorkMode;查詢轉(zhuǎn)速就可以定義為GetFanSpeed;風(fēng)扇支持節(jié)能功能開關(guān),可以定義EnabletFanSavePower等。
因?yàn)閷ν馓峁┳兞亢茈y把控該變量被其他模塊隨意修改,影響系統(tǒng)的穩(wěn)定性
【規(guī)范9】盡量減少沒有必要的數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換
當(dāng)進(jìn)行數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換時(shí),其數(shù)據(jù)的意義、轉(zhuǎn)換后的取值等都有可能發(fā)生變化,而這些細(xì)節(jié)若考慮不周,就很有可能留下隱患.
錯(cuò)誤示例:如下賦值,多數(shù)編譯器不產(chǎn)生告警,但值的含義還是稍有變化。char ch; unsigned short int exam; ch = -1; exam = ch; // 編譯器不產(chǎn)生告警,此時(shí)exam為0xFFFF。
【規(guī)范10】在定義變量時(shí)將其初始化
定義的同時(shí)初始化效率更高,具體原因可自行百度;且也能防止野指針的出現(xiàn),沒有進(jìn)行初始化程序運(yùn)行時(shí)出錯(cuò)很難發(fā)現(xiàn)問題
/* 先定義再賦值效率低 */ int flag; flag = 1; /* 定義的同時(shí)賦值效率高 */ int flag = 1; 或 int flag = GetFlag(); // 函數(shù)返回值賦值





