




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第第頁一份不錯(cuò)的嵌入式C編碼規(guī)范最重要的一條規(guī)則
編寫代碼時(shí)最重要的一條規(guī)則是:檢查周圍的代碼并嘗試模仿它。
作為維護(hù)人員,如果收到的補(bǔ)丁明顯與周圍代碼的編碼風(fēng)格不同,這是令人沮喪的。這是不尊重人的,就像某人穿著泥濘的鞋子走進(jìn)一間一塵不染的房子。
因此,無論本文(推薦)的是什么,如果已經(jīng)編寫了代碼并且您正在對其進(jìn)行修補(bǔ),請保持其當(dāng)前的樣式一致,即使它不是您最喜歡的樣式。
一般規(guī)則
這里列出了最明顯和最重要的一般規(guī)則。在你繼續(xù)閱讀其他章節(jié)之前,請仔細(xì)檢查它們。
使用C99標(biāo)準(zhǔn)
不使用制表符,而是使用空格
每個(gè)縮進(jìn)級別使用4個(gè)空格
在關(guān)鍵字和左括號之間使用一個(gè)空格
在函數(shù)名和左括號之間不要使用空格
int32_t
a
=
sum(4,
3);
/*
OK
*/int32_t
a
=
sum
(4,
3);
/*
Wrong
*/
當(dāng)函數(shù)可以接受任何類型的指針時(shí),總是使用void*,不要使用uint8_t*。函數(shù)在實(shí)現(xiàn)時(shí)必須注意正確的類型轉(zhuǎn)換
/*
*
To
send
data,
function
should
not
modify
memory
poin(te)d
to
by
`data`
variable
*
thus
`const`
keyword
is
important
*
*
To
send
generic
data
(or
to
write
them
to
file)
*
any
type
may
be
passed
for
data,
*
thus
use
`void
*`
*//*
OK
example
*/voidsend_data(const
void*
data,
size_t
len)
{
/*
OK
*/
/*
Do
not
cast
`void
*`
or
`const
void
*`
*/
const
uint8_t*
d
=
data;/*
Function
handles
proper
type
for
internal
usage
*/}voidsend_data(const
void*
data,
int
len)
{
/*
Wrong,
not
not
use
int
*/}
對于解釋,總是使用/*comment*/,即使是單行解釋
在頭文件中總是包含帶有extern關(guān)鍵字的(c++)檢查
每個(gè)函數(shù)都必須包含doxygen-enabled解釋,即使函數(shù)是靜態(tài)的
使用英文名稱/文本的函數(shù),變量,解釋
變量使用小寫字母
如果變量包含多個(gè)名稱,請使用下劃線。force_redraw。不要使用forceRedraw
對于C標(biāo)準(zhǔn)庫的包含文件,請始終使用
用星號聲明指針變量與類型對齊
/*
OK
*/char*
a;/*
Wrong
*/char
*a;char
*
a;
宏和預(yù)處理指令
總是使用宏而不是文字常量,特別是對于數(shù)字
所有的宏必須是全大寫的,并帶有下劃線_字符(可選),除非它們被明確標(biāo)記為function,將來可能會被常規(guī)函數(shù)語法替換
/*
OK
*/#define
MY_MACRO(x)
((x)
*
(x))/*
Wrong
*/#define
square(x)
((x)
*
(x))
不縮進(jìn)子語句內(nèi)#if語句
/*
OK
*/#if
defined(XYZ)#if
defined(ABC)/*
do
when
ABC
defined
*/#endif
/*
defined(ABC)
*/#else
/*
defined(XYZ)
*//*
Do
when
XYZ
not
defined
*/#endif
/*
!defined(XYZ)
*//*
Wrong
*/#if
defined(XYZ)
#if
defined(ABC)
/*
do
when
ABC
defined
*/
#endif
/*
defined(ABC)
*/#else
/*
defined(XYZ)
*/
/*
Do
when
XYZ
not
defined
*/#endif
/*
!defined(XYZ)
*/
如果函數(shù)返回枚舉的成員,則使用ref關(guān)鍵字指定哪個(gè)成員
/**
*
rief
My
enumeration
*/typedef
enum
{
MY_ERR,
/*!
對常量或數(shù)字使用符號('NULL'=>NULL)
/**
*
rief
Get
data
from
input
array
*
param[in]
in:
Input
data
*
eturn
Pointer
to
output
data
on
success,
`NULL`
otherwise
*/const
void
*get_data(const
void*
in)
{
return
in;}
宏的文檔必須包括hideinitializerdoxygen命令
/**
*
rief
Get
minimal
value
between
`x`
and
`y`
*
param[in]
x:
First
value
*
param[in]
y:
Second
value
*
eturn
Minimal
value
between
`x`
and
`y`
*
hideinitializer
*/#define
MIN(x,
y)
((x)
頭/源文件
在文件末尾留下一個(gè)空行
每個(gè)文件都必須包括文件的doxygen解釋和后跟空行的簡要描述(使用doxygen時(shí))
/**
*
file
template.h
*
rief
Template
include
file
*/
/*
Here
is
empty
line
*/
每個(gè)文件(頭文件或源文件)必須包含許可證(開始解釋包括單個(gè)星號,因?yàn)閐oxygen必須忽略這個(gè))
使用與項(xiàng)目/庫已經(jīng)使用的相同的許可證
/**
*
file
template.h
*
rief
Template
include
file
*//*
*
Copyright
(c)
year
FirstName
LASTNAME
*
*
Permission
is
hereby
granted,
free
of
charge,
to
any
person
*
obtaining
a
copy
of
this
software
and
associated
documentation
*
files
(the
"Software"),
to
deal
in
the
Software
without
restriction,
*
including
without
limitation
the
rights
to
use,
copy,
modify,
merge,
*
publish,
distribute,
(sub)license,
and/or
sell
copies
of
the
Software,
*
and
to
permit
persons
to
whom
the
Software
is
furnished
to
do
so,
*
subject
to
the
following
conditions:
*
*
The
above
copyright
notice
and
this
permission
notice
shall
be
*
included
in
all
copies
or
substantial
portions
of
the
Software.
*
*
THE
SOFTWARE
IS
PROVIDED
"AS
IS",
WITHOUT
WARRANTY
OF
ANY
KIND,
*
EXPRESS
OR
IMPLIED,
INCLUDING
BUT
NOT
LIMITED
TO
THE
WARRANTIES
*
OF
MERCHANTABILITY,
FITNESS
FOR
A
PARTICULAR
PURPOSE
*
AND
NONINFRINGEMENT.
IN
NO
EVENT
SHALL
THE
AUTHORS
OR
COPYRIGHT
*
HOLDERS
BE
LIABLE
FOR
ANY
CLAIM,
DAMAGES
OR
OTHER
LIABILITY,
*
WHETHER
IN
AN
ACTION
OF
CONTRACT,
TORT
OR
OTHERWISE,
ARISING
*
FROM,
OUT
OF
OR
IN
CONNECTION
WITH
THE
SOFTWARE
OR
THE
USE
OR
*
OTHER
DEALINGS
IN
THE
SOFTWARE.
*
*
This
file
is
part
of
library_name.
*
*
Author:
FirstName
LASTNAME
*/
頭文件必須包含保護(hù)符#ifndef
頭文件必須包含c++檢查
在c++檢查之外包含外部頭文件
首先用STLC文件包含外部頭文件,然后是應(yīng)用程序自定義文件
頭文件必須包含其他所有頭文件,以便正確編譯,但不能包含更多頭文件(如果需要,.c應(yīng)該包含其余的頭文件)
頭文件必須只公開模塊公共變量/類型/函數(shù)
在頭文件中使用extern作為全局模塊變量,稍后在源文件中定義它們
/*
file.h
...
*/#ifndef
...extern
int32_t
my_variable;
/*
This
is
global
variable
declaration
in
header
*/#endif/*
file.c
...
*/int32_t
my_variable;
/*
Actually
defined
in
source
*/
不要把.c文件包含在另一個(gè).c文件中
.c文件應(yīng)該首先包含相應(yīng)的.h文件,然后是其他文件,除非另有明確的必要
在頭文件中不包含模塊私有聲明
頭文件示例(示例中沒有l(wèi)icense)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 零星維修服務(wù)協(xié)議
- 湖南省長沙市開福區(qū)2024-2025學(xué)年八年級上學(xué)期期末生物學(xué)試題(含答案)
- 英語學(xué)習(xí)情境創(chuàng)設(shè)與運(yùn)用課程設(shè)計(jì)
- 醫(yī)療健康技術(shù)發(fā)展動(dòng)態(tài)表
- 《世界著名音樂作品欣賞與解析教案》
- 教育資源投入與使用效果對比分析表
- 非謂語動(dòng)詞在各類時(shí)態(tài)中的用法解析:高一英語教學(xué)教案
- 個(gè)人健康管理大數(shù)據(jù)分析與服務(wù)平臺建設(shè)方案
- 營銷總監(jiān)聘用協(xié)議
- 數(shù)字校園采購協(xié)議
- 《馬克思主義政治經(jīng)濟(jì)學(xué)概論》課程教學(xué)大綱
- 倉庫管理基礎(chǔ)知識培訓(xùn)模板課件
- 孤獨(dú)癥康復(fù)教育人員上崗培訓(xùn)練習(xí)題庫及答案
- 環(huán)境心理學(xué)課件
- 《質(zhì)量保證體系》情況說明
- 親人意外逝世的訃告微信群通知五篇-正式的去世訃告模板
- DB62∕T 4134-2020 高速公路服務(wù)區(qū)設(shè)計(jì)規(guī)范
- 中電朝陽250兆瓦智慧風(fēng)儲一體化風(fēng)電項(xiàng)目環(huán)評報(bào)告書
- 做一個(gè)幸福教師
- 國家自然科學(xué)基金申請標(biāo)書模板
- 車間斷針記錄表
評論
0/150
提交評論