⑴ C語言程序注釋
C語言編程規范-注釋
規則:
1:一般情況下,源程序有效注釋量必須在20%以上。
說明雹悄:注釋的原則是有助於對程序的閱讀理解,在該加的地方棚肆擾都加了,注釋不宜太多也不能太少,注釋語言必須准確、易懂、簡潔。
2:說明性文件(如頭文件.h文件、.inc文件、.def文件、編譯說明文件.cfg等)頭部應進行注釋,注釋必須列出:版權說明、版本號、生成日期、作者、內容、功能、與其它文件的關系、修改日誌等,頭文件的注釋中還應有函數功能簡要說明。
示例:下面這段頭文件的頭注釋比較標准,當然,並不局限於此格式,但上述信息建議要包含在內。
/*************************************************
Copyright (C), 1988-1999, Tech. Co., Ltd.
File name: // 文件名
Author:
Version:
Date: // 作者、版本及完成日期
Description: // 用於詳細說明此程序文件完成的主要功能,與其他模塊
// 或函數的介面,輸出值、取值范圍、含義及參數間的控
// 制、順序、獨立或依賴等關系
Others: // 其它內容的說明
Function List: // 主要函數列表,每條記錄應包括鏈旦函數名及功能簡要說明
1. ....
History: // 修改歷史記錄列表,每條修改記錄應包括修改日期、修改
// 者及修改內容簡述
1. Date:
Author:
Modification:
2. ...
*************************************************/
3:源文件頭部應進行注釋,列出:版權說明、版本號、生成日期、作者、模塊目的/功能、主要函數及其功能、修改日誌等。
示例:下面這段源文件的頭注釋比較標准,當然,並不局限於此格式,但上述信息建議要包含在內。
/************************************************************
Copyright (C), 1988-1999, Tech. Co., Ltd.
FileName: test.cpp
Author:
Version :
Date:
Description: // 模塊描述
Version: // 版本信息
Function List: // 主要函數及其功能
1. -------
History: // 歷史修改記錄
<author> <time> <version > <desc>
David 96/10/12 1.0 build this moudle
***********************************************************/
說明:Description一項描述本文件的內容、功能、內部各部分之間的關系及本文件與其它文件關系等。History是修改歷史記錄列表,每條修改記錄應包括修改日期、修改者及修改內容簡述。
4:函數頭部應進行注釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值、調用關系(函數、表)等。
示例:下面這段函數的注釋比較標准,當然,並不局限於此格式,但上述信息建議要包含在內。
/*************************************************
Function: // 函數名稱
Description: // 函數功能、性能等的描述
Calls: // 被本函數調用的函數清單
Called By: // 調用本函數的函數清單
Table Accessed: // 被訪問的表(此項僅對於牽扯到資料庫操作的程序)
Table Updated: // 被修改的表(此項僅對於牽扯到資料庫操作的程序)
Input: // 輸入參數說明,包括每個參數的作
// 用、取值說明及參數間關系。
Output: // 對輸出參數的說明。
Return: // 函數返回值的說明
Others: // 其它說明
*************************************************/
5:邊寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。
6:注釋的內容要清楚、明了,含義准確,防止注釋二義性。
說明:錯誤的注釋不但無益反而有害。
7:避免在注釋中使用縮寫,特別是非常用縮寫。
說明:在使用縮寫時或之前,應對縮寫進行必要的說明。
8:注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放於上方則需與其上面的代碼用空行隔開。
示例:如下例子不符合規范。
例1:
/* get replicate sub system index and net indicator */
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
例2:
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
/* get replicate sub system index and net indicator */
應如下書寫
/* get replicate sub system index and net indicator */
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;
9:對於所有有物理含義的變數、常量,如果其命名不是充分自注釋的,在聲明時都必須加以注釋,說明其物理含義。變數、常量、宏的注釋應放在其上方相鄰位置或右方。
示例:
/* active statistic task number */
#define MAX_ACT_TASK_NUMBER 1000
#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */
10:數據結構聲明(包括數組、結構、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對數據結構的注釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋放在此域的右方。
示例:可按如下形式說明枚舉/數據/聯合結構。
/* sccp interface with sccp user primitive message name */
enum SCCP_USER_PRIMITIVE
{
N_UNITDATA_IND, /* sccp notify sccp user unit data come */
N_NOTICE_IND, /* sccp notify user the No.7 network can not */
/* transmission this message */
N_UNITDATA_REQ, /* sccp user's unit data transmission request*/
};
11:全局變數要有較詳細的注釋,包括對其功能、取值范圍、哪些函數或過程存取它以及存取時注意事項等的說明。
示例:
/* The ErrorCode when SCCP translate */
/* Global Title failure, as follows */ // 變數作用、含義
/* 0 - SUCCESS 1 - GT Table error */
/* 2 - GT error Others - no use */ // 變數取值范圍
/* only function SCCPTranslate() in */
/* this moal can modify it, and other */
/* mole can visit it through call */
/* the function GetGTTransErrorCode() */ // 使用方法
BYTE g_GTTranErrorCode;
12:注釋與所描述內容進行同樣的縮排。
說明:可使程序排版整齊,並方便注釋的閱讀與理解。
示例:如下例子,排版不整齊,閱讀稍感不方便。
void example_fun( void )
{
/* code one comments */
CodeBlock One
/* code two comments */
CodeBlock Two
}
應改為如下布局。
void example_fun( void )
{
/* code one comments */
CodeBlock One
/* code two comments */
CodeBlock Two
}
13:將注釋與其上面的代碼用空行隔開。
示例:如下例子,顯得代碼過於緊湊。
/* code one comments */
program code one
/* code two comments */
program code two
應如下書寫
/* code one comments */
program code one
/* code two comments */
program code two
14:對變數的定義和分支語句(條件分支、循環語句等)必須編寫注釋。
說明:這些語句往往是程序實現某一特定功能的關鍵,對於維護人員來說,良好的注釋幫助更好的理解程序,有時甚至優於看設計文檔。
15:對於switch語句下的case語句,如果因為特殊情況需要處理完一個case後進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的注釋。
說明:這樣比較清楚程序編寫者的意圖,有效防止無故遺漏break語句。
示例(注意斜體加粗部分):
case CMD_UP:
ProcessUp();
break;
case CMD_DOWN:
ProcessDown();
break;
case CMD_FWD:
ProcessFwd();
if (...)
{
...
break;
}
else
{
ProcessCFW_B(); // now jump into case CMD_A
}
case CMD_A:
ProcessA();
break;
case CMD_B:
ProcessB();
break;
case CMD_C:
ProcessC();
break;
case CMD_D:
ProcessD();
break;
...
建議:
1:避免在一行代碼或表達式的中間插入注釋。
說明:除非必要,不應在代碼或表達中間插入注釋,否則容易使代碼可理解性變差。
2:通過對函數或過程、變數、結構等正確的命名以及合理地組織代碼的結構,使代碼成為自注釋的。
說明:清晰准確的函數、變數等的命名,可增加代碼可讀性,並減少不必要的注釋。
3:在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息。
說明:注釋的目的是解釋代碼的目的、功能和採用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復注釋信息。
示例:如下注釋意義不大。
/* if receive_flag is TRUE */
if (receive_flag)
而如下的注釋則給出了額外有用的信息。
/* if mtp receive a message from links */
if (receive_flag)
4:在程序塊的結束行右方加註釋標記,以表明某程序塊的結束。
說明:當代碼段較長,特別是多重嵌套時,這樣做可以使代碼更清晰,更便於閱讀。
示例:參見如下例子。
if (...)
{
// program code
while (index < MAX_INDEX)
{
// program code
} /* end of while (index < MAX_INDEX) */ // 指明該條while語句結束
} /* end of if (...)*/ // 指明是哪條if語句結束
5:注釋格式盡量統一,建議使用"/* …… */"。
6:注釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利准確的英文表達。
說明:注釋語言不統一,影響程序易讀性和外觀排版,出於對維護人員的考慮,建議使用中文。
⑵ 什麼是注釋如何在Java程序中加入注釋
試凱裂咐想一下,一個沒有一句注釋的程序源碼,怎麼讀,一個程序要上萬條代碼不可能全部記得住哪一塊是什麼用,而且一個項目也不會是一個人獨自完成,那樣效率太低,多人合作就要給別人說明,每一塊是什麼用,方便他人使用,方便自己更正,而這些說明文字就是注釋,注釋不會被執行,不影響運行結果。
Java中代碼的注釋有三種:盯純
// 注釋一行
/* ...... */ 注釋若干行
/** ...... */ 注釋若干行,並寫入 javadoc 文檔
前兩種比較容易理解,至於第三種,你學習Java看的api文檔就是javadoc程序根據第三種的注釋生成的。
注釋就是對代碼的解釋和說明,其目的是讓人們能夠更加輕松地了解代碼。注釋是編寫程序時,寫源梁程序的人給一個語句、程序段、函數等的解釋或提示,能提高程序代碼的可讀性。
⑶ 如何快速注釋程序代碼
在開發工具中,設置/首選項中,都支持自定義快捷鍵。
大多數這類工具的快捷鍵操作就是 Ctrl + Shift + / 或者 Ctrl + / ,
使用前記得選中要注釋的區域,
取消注釋只用同樣的快捷鍵即可。
/* 這是分隔符 */
給你看一些好玩的注釋:
// 親愛的維護者:
// 如果你嘗試了對這段程序進行『優化』,
// 並認識到這種企圖是大錯特錯,請增加
// 下面這個計數器的個數,用來對後來人進行警告:
// 浪費在這里的總時間 = 39h
2.
/** * 致終於來到這里的勇敢的人:
你是被上帝選中的人,英勇的、不辭勞苦的、不眠不修的來修改
我們這最棘手的代碼的編程騎士。你,我們的救世主,人中之龍,
我要對你說:永遠不要放棄,永遠不要對自己失望,永遠不要逃走,辜負了自己。
永遠不要哭啼,永遠不要說再見。永遠不要說謊來傷害自己。 */
3.
Exception up = new Exception("Something is really wrong."); throw up;
4.
// 一些修改1 - 2002/6/7 增加臨時的跟蹤登錄界面
// 一些修改2 - 2007/5/22 我臨時的犯傻
5.
#define TRUE FALSE //逗一逗調試程序的傻瓜們
6.
if (/*you*/ $_GET['action']) { //celebrate(恭喜)
7.
// 如果這段代碼好用,那它是Paul DiLascia寫的。
//如果不好用,我不知道是誰寫的。
8.
//寫這段代碼的時候,只有上帝和我知道它是幹嘛的
//現在,只有上帝知道
9.
// 暈了,以後再修改
10.
// 神奇。勿動。
⑷ 註解@PostConstruct與@PreDestroy使用講解
從JavaEE5規范開始,Servlet增加了兩個影響Servet生命周期的註解:@PostConstruct和@PreConstruct。這兩個註解被用來修飾一個 非靜態的void方法 。
其實從依賴注入的字面就可以知道,要將對象p注入到對象a,那麼首先吵孫旦就必須得生成對象p與對象a,只能執行注入。所以,如果一個類A中有個成員變數p被@AutoWrited註解,那麼@AutoWrited注入是發生再A的構造方法執行完成之後的。
如果想在生成對象的時候執行某些初始化操作,而偏偏這些執行初始化的操作又依賴於依賴注入,那麼就無法在構造函數中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴注入完成後自動調用。
Construct(構造函數) >> @Autowired >> @PostConstruct
1.只有一個非靜態方法才能使用此註解
2.被註解的方法不得有任何參數
3.被註解的方法返回值必須為void
4.被註解方法不得拋出已檢查異常
5.此方法只會被執行一次
寫法有如下兩種:
或者
被@PostConstruct修飾的方法會在伺服器載入Servlet的時候運行,並且只會被伺服器執行一次。@PostConstruct在構造函數之後執行,init()方法之升擾前執行。PreDestroy()方法在destroy()方法執行之後執行
需要注意的是,註解會多多少少的影響到伺服器的啟動速度。伺服器在啟動時會遍歷Web應用的WEB-INF/classess下的所有class文件與WEB-INF/lib下的所有jar文件,以檢查哪些類使用了註解。如果所有應用程序中沒有任何註解,可以在Web.xml中設置的metadata-complete
屬性設置為true。(支持@PostConstruct和@PreDestroy的伺服器需要凱答支持Servlet2.5規范。Tomcat5.x僅支持Servlet2.4規范)
⑸ 如何在西門子PLC程序中輸入註解
· 項目組件注釋 · 網路注釋 · 項目咐缺燃組件屬性項目組件注釋 在「網路1」上方的灰色方框中單擊,輸入POU注釋。 您可以單擊「切換POU注釋」按鈕 或選擇和取消選擇檢視(View)> POU注釋(POU Comments)選項,在POU注釋「打開」(可視)或「關閉」(隱藏)之間切換。 每條POU注釋所允許使用的最大字元數為4,098。POU注釋是供選用項目,可視時,始終位於POU頂端,並在第一個網路扮嫌之前顯示。 西門子PLC的網路標題: 將游標放在網路標題行的任何位置,輸入一個識別該邏輯網路的標題。昆侖通態觸摸屏網路標題中可允許使用的最大字元數為 127。 西門子PLC的網路注釋: 在「網路1」下方的灰色衡虛方框中單擊,輸入網路注釋。您可以輸入識別該邏輯網路的注釋,並輸入有關網路內容的說明。 您可以單擊「切換網路注釋」按鈕 或選擇和取消選擇檢視(View)> 網路注釋(Network Comments)選項,在網路注釋「打開」(可視)和「關閉」(隱藏)之間切換。 威綸觸摸屏的網路注釋中可允許使用的最大字元數為4,096。 西門子PLC的項目組件屬性: 您可以用以下兩種方法中的一種存取「屬性」標記。 用滑鼠右鍵單擊指令樹中的POU ,並從滑鼠右鍵菜單中選擇「屬性」。「一般」標記 「一般」標記允許您為子例行程序、中斷例行程序和主程序塊(OB1)重新編號和重新命名,並為項目指定一個作者。 注釋:您不能將默認名稱(STEP 7- Micro/WIN指定的POU地址,例如,SBR1代表子例行程序或INT1代表中斷例行程序)用作符號名,因為這樣即構成 STEP 7-Micro/WIN會報告一則錯誤。 如果您在程序中為POU指定符號名,符號名會在程序代碼中顯示,即使您沒有啟用「符號編址」視圖亦如此。符號表顯示一個列出所有符號名賦值的標記(「POU符號」)。您只能檢視該標記;但無法從符號表編輯條目。欲改變賦值,您必須編輯 適當的POU的「屬性」對話框。 「保護」標記 「保護」標記允許您選擇一個密碼保護POU,以便其他用戶無法看到該POU,並在下載時加密。欲用密碼保護POU: 1. 用滑鼠單擊「主POU」,並選擇「屬性...」。 2. 選擇「保護」標記。 3. 選擇「用密碼保護該POU」復選框。輸入一個四個字元的密碼並核實該密碼。
⑹ 西門子PLC如何在STL中輸入程序註解
您可以將一整行作為註解;您可以把註解作為一行放在有效指令之後。您不能創建行中註解;雙斜線之後的所有內容均被編譯程 序視作註解。 最大行長(包括註解)為255個字元。 舉例:Network 1 //本行介紹程序的第一個網路 LD I0.0 //在I0.0處載入數值 O I0.1 //或帶有10.1數值項目組件註解 在網路1上方的灰色方框中單擊,輸入POU註解。 您可以用單擊「切換POU註解」按鈕 或選擇和取消選擇檢視(View)> POU註解(POU Comments)選項的方法,在POU註解「打開」(可見)或「關閉」(隱藏)之間切換。 每條POU註解最多可使用4096個字元。POU註解是選用項目,顯示時始終位於POU頂端,並在第一個網路之前顯示。 網路標題將游標放在網路標題行中的任何位置,輸入一個可識別該邏輯網路的標題。網路標題最多可使用 127個字元。 網路註解在西門子PLC編程軟體網路1下方的灰色方框中單擊,輸入網路註解。您可以輸入一條識別該邏輯網路的註解,並增加有關網路內容的說 您可以用單擊「切換網路註解」按鈕 或選擇和取消選擇檢視(View)> 網路註解(Network Comments)選項的方法,在網路註解「打開」(可見)或「關閉」(隱藏)之間切換。 網路註解中最多可使用4096個字元。 項目組件屬性 您可以用以下任何一種方法存取「屬性」製表符: 用滑鼠右鍵單擊指令樹中的POU,並從滑鼠右鍵菜單中選擇「屬性」。「一般」製表符 「一般」製表符允許您為子例行程序、中斷例行程序和主程序塊(OB1)重新編號和重新命名,並為項目指定一個作者。 注釋:您不能將默認名稱(由STEP 7-Micro/WIN指定的POU地址,例如,SBR1代表子例行程序或INT1代表中斷例行程序)用作符號名,因為這將構成重 STEP 7-Micro/WIN會報告一則錯誤。 如果您為西門子PLC程序中的POU指定符號名,符號名會在程序代碼中顯示,即使您沒有啟用「符號編址」視圖亦如此。「符號表」顯 示一個特殊的製表符(「POU符號」),該製表符列出所有符號名賦值。您只能檢視該製表符,但無法從「符號表」編輯條 目。欲更改賦值,您必須編輯適當POU的「屬性」對話。 「保護」製表符
⑺ 為什麼要為程序添加註釋,在java程序中如何為程序添加註釋
注釋是用來給開發者或者是軟體後續的維護者來看的。一般是用來描述這一段代碼或者是程序做了些什麼樣的事情。實現了哪閉乎些功能,神拿java裡面注釋代碼,可以分為行注釋和塊注釋,方法注釋等。
行轎瞎悉注釋就是在需要注釋的代碼前加 //
塊注釋則是用 /* 和 */ 把文本段落框起來即可
⑻ 如何快速注釋程序代碼
在進行程序調試時,可能需要注釋掉大片的程序代碼,以縮小Bug出現的范圍,從而盡快鎖明大裂定錯誤原因。那麼使用Eclipse如何快速注釋程序代碼呢?下面就講解3種常用方法。
法一:使用Ctrl+/快捷鍵
第1步:在Eclipse中拖動滑鼠,選中需要注釋的代碼,通常為連續多行代碼。
第2步:按住Ctrl+/快捷鍵
第3步:會發現所選代碼被「//」注釋掉。當調試完後,可再次按住Ctrl+/快捷鍵打開仿桐注釋。
方法二:使用Ctrl+Shift+C快捷鍵
第1步:在Eclipse中拖動滑鼠,選中需要注釋的代碼。
第2步:按住Ctrl+Shift+C快捷鍵
第3步:會發現所選代碼被「//」注釋掉。當調試完後,可再次按住Ctrl+Shift+C快捷鍵打開注釋。
方法三:使用Ctrl+Shift+/快捷鍵
第1步:在Eclipse中拖動滑鼠,選中需要注釋的代碼。
第2步:按住Ctrl+Shift+/快捷鍵。
第3步:會發現所選代碼被「/* */」注釋掉。
第4步:當調試完後激閉,可按住Ctrl+Shift+\快捷鍵打開注釋。
⑼ 在python中如何使用注釋
python中的注釋有多種,有單行注釋,多行注釋,批量注釋,中文注釋也是常用的。
一、python單行注釋符號(#):井號(#)常被用作單行注釋符號,在代碼中使用#時,它右邊的任何數據都會被忽略,當做是注釋。print 1 #輸出1,#號右邊的內容在執行的時候是不會被輸出的。
二、批量、多行注釋符號:在python中也會有注釋有很多行的時候,這種情況下就需要頌坦批量多行注釋符了。多行注釋是用三引號''' '''包含的。
python正則表達式的注釋方法:學過正則都知道,那簡直是天書,為了提高正則的可讀性,鍵帶正則表達式中提供了X(VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字元,並可以加入注釋。
Python:
是完全面向對象的語言。函數、模塊、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。Python支持重載運算符和動態類型。
相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的野亮桐支持。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
⑽ 為什麼要為程序添加註釋,在java程序中如何為程序添加註釋
定義規范的目的是讓項目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項目組中因為換人而帶來的損失。(這些規范並不是一定要絕對遵守,但是一定要讓程序有良好的可讀性)。
// 注釋一行
/* ...... */ 注釋若干行
/** ...... */ 注釋若干行,並寫入 javadoc 文檔
如下代碼:
package陪襪山com.qiu.lin.he;
/**
*第三種注釋方式
*@authorAdministrator
*
*/
publicclassCeShi{
publicstaticvoidmain(String[]args){
intstr=107653;
//System.out.print(str/(24*60*60)+"天");
/*System.out.print(str%(24*60*60)/(60*60)+"蘆中小時");
System.out.print(str%(24*60好凱*60)%(60*60)/60+"分鍾");*/
System.out.print(str%(24*60*60)%(60*60)%60+"秒");
}
}