C語言代碼規范(四)命名規則

一、宏定義全部字母大寫,單詞間下劃線間隔

#define FLASH_PAGE_SIZE    256
#define FLASH_SECTOR_SIZE  (4  * 1024)
#define FLASH_BLOCK_SIZE   (64 * 1024)
#define FLASH_SIZE         (16 * 1024 * 1024)

?

二、const修飾的常量全部字母大寫,單詞間下劃線間隔

const int MAX_NUM = 100;

?

三、變量名全部小寫,單詞間下劃線間隔

unsigned char flash_read_buffer[256] = {0};

?

四、全局變量應添加前綴"g_",局部變量不需要添加。

unsigned char g_flash_read_buffer[256] = {0};

?

五、函數名首字母大寫,單詞間下劃線間隔。

void Get_Flash_Data(void);

如果涉及到某個模塊,應以"模塊名_"的格式。

void LED_Init(void);

如果后續涉及到分層,硬件層應添加前綴"HW_",應用層應添加前綴"APP_"。

?

六、命名就要做到自解釋

所有的命名都應該要做到自解釋,即只看命名就知道它的作用。

本人所在前某公司糟糕的命名示例:

#define DBVALUE_CMD0    0x00
#define DBVALUE_CMD1    0x01
#define DBVALUE_CMD2    0x02
#define DBVALUE_CMD3    0x03

這命名讓人抓狂。DB是什么意思?CMD0~3具體是干什么的?

詢問作者才知道,DB是拼音。。。地標。。。

地標值命令0~3的作用是什么?命名讓人摸不著頭腦。

修改:

#define STOP_STATION                        0x00
#define STOP_THEN_TURN_BACK_STATION         0x01
#define STOP_5S_THEN_TURN_BACK_STATION      0x02
#define STOP_5S_THEN_KEEP_FORWARD_STATION   0x03

這樣就一目了然,當地標是0x00時,是停止地點;0x01時,是到地點停止后立即轉向后方向;0x02時,是到地點停止5S后轉向后方向;0x03是到地點停止5S后繼續向前。

?

七、嚴禁使用拼音命名

代碼是寫給別人看的。待過的公司都有外國客戶,給他們的DemoCode比較規范,不需要技術支持他們自己調通了(相比國內某些大公司的碼農在有中文注釋和中文數據手冊的情況下還需要FAE手把手教寫代碼,真讓人唏噓)。如果DemoCode里全是拼音,不敢想象。別說是外國人,國人有時候也難猜到拼音是什么意思,比如第六點中的DB是什么意思。

前公司代碼示例:

unsigned char SHIBAI[6];Usart4_Send_Array(SHIBAI, 6);Delay_CMD_FLAG[Play_Fail_Flag] = DELAY_CMD_LOCK;

SHIBAI->失敗,下面的Fail又是什么情況,讓人啼笑皆非。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Forbidden You don't have permission to access / on this server PHP

Forbidden You dont have permission to access / on this server PHP 在新安裝的谷歌游覽器里,打不了PHP網站了,錯誤顯示: Forbidden You dont have permission to access / on this server. 原因還是配置權限問題 解決辦法: wa…

Spring 3.1和JPA的持久層

1.概述 本教程顯示了如何使用Hibernate作為持久性提供程序使用JPA設置Spring 。 有關使用基于Java的配置和項目的基本Maven pom設置Spring上下文的分步介紹,請參閱本文 。 2. Java的JPA Spring配置 要在Spring項目中使用JPA, 需要設置EntityManager 。…

150928錯誤認識

1. $arr array(); foreach ($re as $k>$v){  $arr[] $v[updatetime];} $arr的返回結果為: Array ([0] > 2014-09[1] > 2015-04[2] > 2015-09 )$arr array(); foreach ($re as $k>$v){  $arr[$k] $v[updatetime];} $arr的返回結果為&#xff…

STM32F1筆記(一)GPIO輸出

GPIO:General Purpose Input Output (通用輸入/輸出)。 GPIO最經典應用:LED燈。 先看電路。聲明:參考正點原子戰艦開發板。 與LED串聯的電阻稱為限流電阻。 限流電阻計算公式:R(U-LED壓降)/20ma。 U為LE…

dataframe轉化為array_【Python專欄】12 種高效 Numpy 和 Pandas 函數為你加速分析

來源:機器之心編譯:Jamin、杜偉、張倩我們都知道,Numpy 是 Python 環境下的擴展程序庫,支持大量的維度數組和矩陣運算;Pandas 也是 Python 環境下的數據操作和分析軟件包,以及強大的數據分析庫。二者在日常…

具有GlassFish和一致性的高性能JPA –第1部分

您以前聽說過連貫性嗎? 大概是。 它是那些著名的內存網格解決方案之一,該解決方案承諾了超快的數據訪問速度和對經常使用的數據的無限空間。 一些眾所周知的競爭對手是Infinispan , Memcached和Terracotta Ehcache 。 它們都很棒,…

如何在自己的代碼中實現分享視頻文件或者是圖片文件到微信 QQ微博 新浪微博等!!!...

首先在文檔第一句我先自嘲下 , 我是大傻逼, 弄了兩天微信是視頻分享,一直被說為啥跟系統的相冊分享的不一樣,尼瑪!!! 這里來說正文,我這里不像多少太多,大家都是程序猿&a…

sql 數據庫中用創建好的視圖修改表數據

只要滿足下列條件,即可通過視圖修改基礎基表的數據: 1、任何修改(包括 UPDATE、INSERT 和 DELETE 語句)都只能引用一個基表的列。 2、視圖中被修改的列必須直接引用表列中的基礎數據。不能通過任何其他方式對這些列進行派生&#…

boost原理與sklearn源碼_機器學習sklearn系列之決策樹

一、 Sklearn庫 Scikit learn 也簡稱 sklearn, 自2007年發布以來,scikit-learn已經成為Python重要的機器學習庫了。支持包括分類、回歸、降維和聚類四大機器學習算法。還包含了特征提取、數據處理和模型評估三大模塊。sklearn是Scipy的擴展,建立在NumPy和…

STM32F1筆記(二)GPIO輸入

STM32 GPIO輸入的經典應用是按鍵。 先看電路。聲明:參考正點原子戰艦開發板。 在這里可以看到,KEY_UP按鍵是高電平有效的,即當按下該按鍵時,GPIO讀到高電平。 KEY0/1/2是低電平有效的,即當按下該按鍵時,G…

Google Authenticator:將其與您自己的Java身份驗證服務器配合使用

用于移動設備的Google Authenticator應用程序是一個非常方便的應用程序,它實現了TOTP算法(在RFC 6238中指定)。 使用Google Authenticator,您可以生成時間密碼,該密碼可用于在共享請求用戶密鑰的身份驗證服務器中授權用…

[Week2 作業] 代碼規范之爭

這四個問題均是出自 http://goodmath.scientopia.org/2011/07/14/stuff-everyone-should-do-part-2-coding-standards/ 。 我對這四個問題均持反駁的看法,下面是我的理由~ Q1:這些規范都是官僚制度下產生的浪費大家的編程時間、影響人們開發效率, 浪費時…

STM32F1筆記(三)UART/USART

UART:Universal Asynchronous Receiver/Transmitter(通用異步收/發器) USART:Universal Synchronous/Asynchronous Receiver/Transmitter(通用同步/異步串行收/發器) 從命名即可看出USART就是UART的基礎上…

python安裝界面翻譯_python環境搭建

如果想要運行python需要有解釋器和編輯器。 什么是解釋器 解釋器我們可以把它理解成翻譯官,它是將我們寫的python代碼翻譯成計算機能夠懂得機器語言。 然后計算機收到解釋器的命令來干活,最終再將結果反饋在解釋器中。 解釋器推薦使用anaconda3 什么是an…

無需重新部署Eclipse和Tomcat即可進行更改

他們說,由于應用程序服務器過大,Java的開發速度很慢–您必須重新部署應用程序才能看到所做的更改。 使用PHP,Python等腳本語言時,可以“保存并刷新”。 這個法定問題總結了這個“神話”。 是的,這是一個神話。 您也可以…

進階篇-用戶界面:4.Android中常用組件

1.下拉菜單 在Web開發中&#xff0c;HTML提供了下拉列表的實現&#xff0c;就是使用<select>元素實現一個下拉列表&#xff0c;在其中每個下拉列表項使用<option>表示即可。這是在Web開發中一個必不可少的交互性組件&#xff0c;而在Android中的對應實現就是Spinne…

收款單單據編號不正確

問題現象:現在在應收&#xff0c;應付的收款單錄入和付款單錄入里點擊增加的話&#xff0c;單據編號如果是出現2024呢&#xff0c;按保存的話&#xff0c;就會出現單據號重復&#xff1b;查到的最大的單據號是3034&#xff0c;在流水號里改成3038后再增回加的話還是出現2024。然…

STM32F1筆記(四)NVIC中斷優先級管理

STM32將中斷分為5個組&#xff0c;組0~4。配置代碼如下&#xff1a; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 在標準庫里&#xff0c;分組的定義如下&#xff1a; /** defgroup Preemption_Priority_Group * {*/#define NVIC_PriorityGroup_0 ((uint32_t…

到底是什么程序和功能?

許多RDBMS支持“例程”的概念&#xff0c;通常將其稱為過程和/或函數。 這些概念已經在編程語言中存在了一段時間了&#xff0c;而且不在數據庫中。 區分程序和功能的著名語言是&#xff1a; 艾達 基本知識 帕斯卡 等等… &#xff08;存儲的&#xff09;過程和&#xff08…

http的“無連接”指的是_http協議無狀態中的 quot;狀態quot; 到底指的是什么?...

引子&#xff1a;最近在好好了解http&#xff0c;發現對介紹http的第一句話【http協議是無狀態的&#xff0c;無連接的】就無法理解了&#xff1a;無狀態的【狀態】到底指的是什么&#xff1f;&#xff01;找了很多資料不僅沒有發現有一針見血正面回答這個問題的&#xff0c;而…