国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 925|回復(fù): 0
打印 上一主題 下一主題

知名半導(dǎo)體MCU大廠軟件開(kāi)發(fā)C代碼規(guī)范

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-5-6 14:30:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
知名半導(dǎo)體MCU大廠軟件開(kāi)發(fā)C代碼規(guī)范
  本文講解的是飛思卡爾軟件開(kāi)發(fā)C語(yǔ)言編碼規(guī)范。下面是編碼規(guī)范原文:
1.引言
  制定此編碼風(fēng)格指導(dǎo)手冊(cè)的目的是為了使按此規(guī)范編寫(xiě)出的C/C++代碼極易被閱讀和理解。
2.與其他編碼風(fēng)格對(duì)比
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml3064\wps5.png
3.基本排版格式
·
需要以4個(gè)空格為單位的縮進(jìn).
·
·
堅(jiān)決不用Tab鍵,要用空格鍵.
·
·
所有文件結(jié)尾必須空一行.
·
·
文本文件必須用UTF-8編碼.
·
·
每一行不能超過(guò)100個(gè)字符.
·
4.文檔與注釋
·
恰當(dāng)?shù)剡M(jìn)行代碼注釋.
·
·
關(guān)于注釋長(zhǎng)度沒(méi)有具體限制,只要能提供幫助,就盡可能地注釋.
·
·
注釋?xiě)?yīng)該解釋代碼為什么要這么做,而不是如何去做(代碼本身已經(jīng)表明了如何去做).
·
·
選擇Doxygen文檔系統(tǒng)來(lái)完成注釋,除了在函數(shù)中的注釋之外(因?yàn)?/font>Doxygen不適用于個(gè)別代碼行的注釋)Doxygen也不適用于匯編.
·
5.標(biāo)準(zhǔn)數(shù)據(jù)類型
·
僅使用C99標(biāo)準(zhǔn)給出的整型(定義見(jiàn)stdint.h文件),如uint32_tint16_t等,不要typedef自己的整型類型,如u8int_32WORD.
·
·
使用char wchar_t來(lái)表示字符串,但二進(jìn)制緩存仍應(yīng)使用uint8_t
·
·
僅使用C99標(biāo)準(zhǔn)給出的bool(定義見(jiàn)stdbool.h文件)來(lái)表示布爾變量,truefalse表示其值. ps: windows平臺(tái)下編譯時(shí)需自行定義,因?yàn)?/font>windows下不包含stdbool.h文件)
·
6.標(biāo)識(shí)符的命名
  以下是C/C++下變量、函數(shù)、typedef、宏命名的基本規(guī)則,命名規(guī)則可以接受細(xì)微改動(dòng),但要保證在同一模塊中的一致性:
·
全局函數(shù)名:全小寫(xiě),單詞用下劃線隔開(kāi)
如:i2c_receive_data()
·
·
普通變量名:Camel命名法
如:thisIsMyVariable
·
·
結(jié)構(gòu)體名和類名:Pascal命名法
如:BigBoxOfTools
·
·
類成員函數(shù)名:Camel命名法
如:initialLongProcess()
·
·
typedef重命名:全小寫(xiě),單詞用下劃線隔開(kāi),加_t后綴
如:big_box_of_tools_t
·
·
用宏命名:?jiǎn)卧~全大寫(xiě)(僅在宏中使用,且必須使用)
·
  描述性強(qiáng)的,可讀性強(qiáng)的變量名非常重要:
·
大部分單詞都不應(yīng)該縮寫(xiě),比如應(yīng)用block而不是blk,應(yīng)用count而不是cnt.
一些流行的縮寫(xiě)還是允許的,如initconfig
·
·
完全可以接受較長(zhǎng)的,描述性的變量名
·
·
布爾型變量可以使用”is””did”等前綴,這會(huì)清晰地表明其是一個(gè)布爾型
·
·
變量名應(yīng)該可以表達(dá)其目的,但堅(jiān)決反對(duì)匈牙利命名(加數(shù)據(jù)類型前綴)
正確: temporaryParameters, startBlock, nodeKey, isAlarmEnabled
錯(cuò)誤:u32BlkNum, bEnabled
·
  有時(shí)候?yàn)榱吮砻鞣秶湍康模行┳兞棵强梢约忧熬Y和后綴的:
·
局部變量:無(wú)需前綴
·
·
全局變量:加g_前綴
·
·
靜態(tài)變量:加s_前綴
·
·
類成員變量:加m_前綴
·
·
常量:加k前綴
1):如kUnconstrained, kFirstPage, kMaxBufferBytes
2)k前綴使常量很容易被識(shí)別
·
·
typedef型變量:加_t后綴
·
  備注:切記不要用匈牙利命名法,因?yàn)槠鋾?huì)導(dǎo)致變量名難于閱讀,且類型前綴常常會(huì)與變量真正類型不同步,微軟曾是此命名法的擁躉,但其已意識(shí)到此命名法的缺陷,目前正在逐漸脫離此方法。
7.可調(diào)試性
·
一系列的整型常量應(yīng)該用枚舉來(lái)表示,而不是用宏來(lái)定義
1):在調(diào)試時(shí),常量被顯示為真實(shí)的標(biāo)識(shí),而不是數(shù)字
2):便于常量的邏輯分組
·
·
大部分情況下,使用內(nèi)聯(lián)函數(shù)來(lái)代替宏功能
1):在調(diào)試中,內(nèi)聯(lián)函數(shù)可以被禁用,故可以跳過(guò)
2):內(nèi)聯(lián)函數(shù)參數(shù)有類型,而宏中參數(shù)不可以有類型
3):這個(gè)規(guī)則僅適用于當(dāng)用宏來(lái)表示一段代碼時(shí),不適用于在表達(dá)式中表示某部分的宏
·
8. C99標(biāo)準(zhǔn)
·
需要使用C99
C99被允許使能C++C89語(yǔ)義內(nèi)聯(lián)
·
·
在盡量靠近變量被使用的地方來(lái)聲明變量,而不是一律在函數(shù)頂部聲明
1):這可以很容易地找到變量的定義
2):可以方便編譯器進(jìn)行優(yōu)化
·
·
單行注釋?xiě)?yīng)使用//而不是/* …*/
1):大部分人認(rèn)為//式注釋方便閱讀
2):免去注釋嵌套的煩惱
·
·
多行注釋/* …*/可以被用作大段確定的內(nèi)容注釋,就像Doxygen注釋頭一樣,以使得被注釋的內(nèi)容突出。
·
9.內(nèi)聯(lián)功能
  頭文件中,內(nèi)聯(lián)功能啟用應(yīng)用static inline來(lái)完成
10. C/C++通用性
  頭文件中的公用函數(shù)原型必須包含在下列語(yǔ)句中
#if defined(__cplusplus)
extern "C" {
#endif // __cplusplus

// 此處放函數(shù)原型

#if defined(__cplusplus)
}
#endif // __cplusplus
  C中一般都用typedef來(lái)重命名結(jié)構(gòu)體和枚舉數(shù)據(jù)類型,不要提及原始的結(jié)構(gòu)體或枚舉型名
  C++中,則不需用typedef來(lái)重命名,直接用原始的結(jié)構(gòu)體或枚舉型名;但是如果代碼被C/C++共享,則應(yīng)遵從C風(fēng)格
  對(duì)于被用在C++中的函數(shù)(比如類成員)而言,如果函數(shù)不帶任何參數(shù),則不需要一個(gè)專門(mén)的void參數(shù)來(lái)表明,而在C中這是需要的
11.花括號(hào)的使用
  花括號(hào)的使用雖重要性不高,但經(jīng)常起爭(zhēng)議
·
通常情況下,花括號(hào)應(yīng)該單獨(dú)起一行,不需要額外的縮進(jìn)
·
·
有時(shí)為了保持可讀性,可以不遵守上一規(guī)則
·
·
花括號(hào)使用的關(guān)鍵點(diǎn)在于不要將代碼湊在一起,從而使得代碼比較難閱讀;也不要因?yàn)榫唧w格式的限定,從而打破視覺(jué)流程
·
  使用規(guī)則可以接受細(xì)微改動(dòng),但要保證在同一模塊中的一致性,以及易于閱讀
結(jié)構(gòu)體和類示例:
struct Monkey
{
int x;
};

typedef struct MonkeyTwo {
int y;
} monkey_two_t;

class Cube
{
public:
Cube(int theSize);

private:
int m_size;
};
枚舉示例:
enum _my_enum
{
kValueOne = 1,
kValueTwo = 2
};

typedef enum _another {
kAnotherOne = 10,
kAnotherTwo = 20
} another_t;
函數(shù)示例:
void foo()
{
printf("hi\n");
}
If語(yǔ)句示例:
if (baz >= kMaximumBaz)
{
baz = kMaximumBaz;
}
else if (!ready)
{
makeItReady();
}
else
{
abort();
}
For語(yǔ)句示例:
for (i=0; i < 10; ++i)
{
printf("%d", i);
}
While語(yǔ)句示例:
while (!done)
{
doSomething();
}
Do-while語(yǔ)句示例:
do {
doSomething();
} while (!done);
Switch語(yǔ)句示例:
switch (value)
{
case 0:
x += 1;
break;

case 1:
{
int y;
calculateIt(&y);
break;
}

default:
return;
}
命名空間示例:
namespace fsl
{
// Don't indent namespace contents!
}
Try-catch語(yǔ)句示例:
try
{
}
catch (std::exception & e)
{
}
catch (...)
{
}
12. 關(guān)于MISRA-C規(guī)范
  代碼風(fēng)格基本遵照MISRA-C:20xx規(guī)范,但除了以下例外(這些例外是基于MISRA-C:2004規(guī)范的)
file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml3064\wps6.png
  至此,飛思卡爾軟件開(kāi)發(fā)C語(yǔ)言編碼規(guī)范痞子衡便介紹完畢了,掌聲在哪里~~~

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费全部观看天天性色 | 丁香婷婷视频 | 日韩一级欧美一级一级国产 | 国产第一自拍 | 亚洲福利国产精品17p | 好男人官网在线手机免费观看 | 欧美肥 | 四虎免费看黄 | 国产成人精品曰本亚洲 | 综合九九 | 99这里只有精品6 | 4虎成人| 欧美在线视频网站 | 三级色网站 | 久久99精品久久久久久h | 99久久久国产精品免费牛牛四川 | 中文字幕一区二区三匹 | 女老师1 | 欧美a一 | 久精品在线观看 | 精品久久久久久国产免费了 | 国产福利一区二区在线观看 | 国产精品综合在线 | 国产精品黄页在线播放免费 | 欧美精品中文 | 久久优| 91视频免费入口 | 蜜柚在线观看免费高清 | 久热这里只精品99国产6_99 | 欧美草逼网 | 亚洲一区成人 | 色播久久 | 亚洲欧美在线综合一区二区三区 | 国产欧美日韩中文久久 | 日本久久高清视频 | 精品一区二区三区 不卡高清 | 国产精品香蕉在线一区二区 | 午夜成a人片在线观看 | 日本在线播放一区 | 日韩免费精品视频 | 日韩精品亚洲专区在线观看 |