1. 有誰知道c語言程序的編程規范,給我概括一下,
1引言
1.1編寫目的
在軟體開發過程中,編碼的工作量是相當大的,同一項目參與編程的人可能有各自編程的經驗和習慣,不同風格的程序代碼使維護工作變得復雜和困難。為了提高代碼的可讀性、系統的穩定性及降低維護和升級的成本,特編寫本規范以統一各開發人員的編程工作。
1.2 適用對象
本規范適用於所有開發人員,包括應用程序、網頁及資料庫開發人員,及有關的程序測試人員。
1.3 引用標准
GB/T 11457 軟體工程術語
GB 8566 計算機軟體開發規范
GB 8567 計算機軟體產品開發文件編制指南
2.編寫要求
2.1一般代碼規則
可讀性原則,這是評價程序質量的首選指標,寧可不要一些技巧也要保證程序的易讀特性,不要因過分追求技巧而犧牲程序的可讀性。
功能獨立性原則。每一程序塊只完成一個獨立的功能,反過來,每一獨立的功能只在一程序塊內完成,盡量低耦合、高內聚。
提示說明應當簡短且避免產生歧義。
提示或警告信息應當具有向導性,能准確告訴用戶錯誤原因及恢復方法。提示和警告對話框應當使用標准規范。
快捷鍵的定義必須符合用戶操作習慣。
程序需要長時間處理或等待時,應當顯示進度條並提示用戶等待。
一些敏感操作,如刪除等操作在執行前必須提示用戶確認。
2.2變數、函數、過程、控制項等命名規則
2.2.1 變數命名
變數命名採用[作用范圍][數據類型][自定義名稱]規則定義,並遵循匈牙利命名法。要求看到變數名就能直觀的看出其范圍和數據類型。
匈牙利命名規則:
a Array 數組
b BOOL (int) 布爾(整數)
by Unsigned Char (Byte) 無符號字元(位元組)
c Char 字元(位元組)
cb Count of bytes 位元組數
cr Color reference value 顏色(參考)值
cx Count of x (Short) x的集合(短整數)
dw DWORD (unsigned long) 雙字(無符號長整數)
f Flags (usually multiple bit values) 標志(一般是有多位的數值)
fn Function 函數
g_ global 全局的
h Handle 句柄
i Integer 整數
l Long 長整數
lp Long pointer 長指針
m_ Data member of a class 一個類的數據成員
n Short int 短整數
p Pointer 指針
s String 字元串
sz Zero terminated String 以0結尾的字元串
tm Text metric 文本規則
u Unsigned int 無符號整數
ul Unsigned long (ULONG) 無符號長整數
w WORD (unsigned short) 無符號短整數
x,y x, y coordinates (short) 坐標值/短整數
v void 空
作用范圍:
范圍 前綴 例子
全局作用域 g_ g_Servers
成員變數 m_ m_pDoc
局部作用域 無 strName
數據類型
VC常用前綴列表
前綴 類型 描述 例子
ch char 8位字元 chGrade
ch TCHAR 16位UNICODE類型字元 chName
b BOOL 布爾變數 bEnabled
n int 整型(其大小由操作系統決定) nLength
n UINT 無符號整型(其大小由操作系統決定) nLength
w WORD 16位無符號整型 wPos
l LONG 32位有符號整型 lOffset
dw DWORD 32位無符號整型 dwRange
p * 內存模塊指針,指針變數 pDoc
l p FAR* 長指針 lpDoc
lpsz LPSTR 32位字元串指針 lpszName
lpsz LPCSTR 32位常量字元串指針 lpszName
lpsz LPCTSTR 32位UNICODE類型常量指針 lpszName
h handle Windows對象句柄 hWnd
lpfn (*fn)() 回調函數指針 Callback Far pointer to
CALLBACK function lpfnAbort
2.2.2 函數、過程命名
函數或過程名的主體應該使用大小寫混合形式,並且應該足夠長以描述它的作用。而且,函數名應該以一個動詞起首,如 InitNameArray 或 CloseDialog。對於頻繁使用的或長的項,推薦使用標准縮略語以使名稱的長度合理化。一般來說,超過 32 個字元的變數名在 VGA 顯示器上讀起來就困難了。當使用縮略語時,要確保它們在整個應用程序中的一致性。在一個工程中,如果一會兒使用 Cnt, 一會兒使用 Count,將導致不必要的混淆。
對於自行編寫的函數,若是系統關鍵函數,則須在函數實現部分的上方標明該函數的信息,格式如下:
//======================================================
// 函 數 名:InsureHasOutputInfo
// 功能描述:確保有適當的輸出信息
// 輸入參數:nProctID:相應的產品ID
// 輸出參數:void
// 創建日期:00-2-21
// 修改日期:00-2-21
// 作 者:***
// 附加說明:
//======================================================
2.2.3 用戶定義類型
在一項有許多用戶定義類型的大工程中,常常有必要給每種類型一個它自己的三個字元的前綴。如果這些前綴是以 "u" 開始的,那麼當用一個用戶定義類型來工作時,快速識別這些類型是很容易的。例如,ucli 可以被用來作為一個用戶定義的客戶類型變數的前綴。
註:對於非通用的變數,請在定義時加以注釋說明,變數定義盡可能放在最開始處。
2.2.4 控制項命名
應該用一致的前綴來命名對象,使人們容易識別對象的類型。
VC常用宏定義命名列表
前綴 符號類型 符號例子 范圍
IDR_ 標識多個資源共享的類型 IDR_MAINFRAME 1~0x6FFF
IDD_ 對話框資源(Dialog) IDD_SPELL_CHECK 1~ 0x6FFF
HIDD_ 基於對話框的上下文幫助 HIDD_SPELL_CHECK 0x20001~0x26FF
IDB_ 點陣圖資源(Bitmap) IDB_COMPANY_LOGO 1~0x6FFF
IDC_ 游標資源(Cursor) IDC_PENCIL 1~0x6FFF
IDI_ 圖標資源(Icon) IDI_NOTEPAD 1~0x6FFF
ID_、IDM_ 工具欄或菜單欄的命令項 ID_TOOLS_SPELLING 0x8000~0xDFFF
HID_ 命令上下文幫助 HID_TOOLS_SPELLING 0x18000~0x1DFFF
IDP_ 消息框提示文字資源 IDP_INVALID_PARTNO 8~0xDFFF
HIDP_ 消息框上下文幫助 HIDP_INVALID_PARTNO 0x30008~0x3DFFF
IDS_ 字元串資源(String) IDS_COPYRIGHT 1~0x7FFF
IDC_ 對話框內的控制資源 IDC_RECALC 8~0xDFFF
2.3源代碼規則
2.3.1風格約定:採用縮進的格式保存程序的層次結構。要求能直觀的看出循環、判斷等層次結構。
每一個嵌套的函數塊,使用一個TAB縮進(可以設定為4個空格),大括弧必須放在條件語句的下一行,單獨成一行,便於匹對反大括弧應該在單獨的一行,在大多數情況下反擴號應有注釋內容。舉例如下:
if(condition1)
{
while(condition2)
{
…..
…..
}//end while(condition2)
}//end if (condition1)
或者
if(condition1){
while(condition2){
….
….
}//end while(condition2)
}//end if(conditionl)
2.3.2在操作符的前後必須使用空格。
2.3.3在分隔數組下標和函數參數的逗號後面必須添上空格。
2.3.4嚴禁使用go to 語句。
2.3.5對資料庫操作只能使用標准SQL語句,關鍵字必須使用大寫(如SELECT、WHERE等),數據元素(表、欄位、視圖等)必須按照數據字典書寫。
2.3.6程序代碼中要有足夠的容錯處理功能。
對可能發生的異常統一採用C++拋出格式:
try
{
//可能引發異常的代碼
throw t; //手工拋出異常
}
catch(type_1 e) // type_1為類型定義符、如int、CException、_com_error
{
// type_1類型異常處理
}
catch(type_2 e)
{
// type_2類型異常處理
}
2.3.7程序代碼結構必須層次清楚,適當使用空行分段。
2.3.8工程的版本控制要嚴格,版本格式為.me.ae.yy.mmdd,其中:[me]表示主版本號;[ae]表示輔版本號;[yy.mmdd]表示版本建立日期。高版本盡量兼容低版本的用法、數據或協議。
2.4文件的命名規則
2.4.1根據系統設計所規定的結構,建立相應的文件夾,根據需要建立子文件夾。
2.4.2文件夾和文件的名稱應盡量能夠表達其意義,盡量使用英文命名,絕對不能漢字。
2.4.3文件名稱一般採用「xxx_yyy.ext」格式,xxx(3-4個字母)表示分類,yyy(字母數自定)表示操作 (如 「 /example/exp_edit.htm 」)
\
我從公司文檔拷貝的!你自己看看對你有沒有用!
2. C語言 代碼 怎麼寫的規范 把下面的 寫的規范
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, i = 10;
printf("猜數字游戲,(10到200之間)您只有10次機會猜中哦,請輸入\n");
scanf("%d", &a);
while (a!=88 && i>0)
{
if (a>88)
{
printf("你輸入的數字過高\n");
}
else
{
printf("你輸入的數字過低\n");
}
scanf("%d", &a);
i--;
}
if(a == 88)
{
printf("恭喜你!猜對了!\n");
}
else
{
printf("你的10次機會已經用完了\n");
}
system("pause");
return 0;
}
3. 求助:C語言書寫規范
1.
1.1符號命名規則
1.1.1符號名包括模塊名、常量名、標號名、子程序名等。這些名字應該能反映它所代表的實際東西,具有一定的意義,使其能夠見名知義,有助於對程序功能的理解。命名採用匈牙利命名法。規則如下:
(1)所有宏定義、枚舉常數和const變數,用大寫字母命名。在復合詞里用下劃線隔開每個詞。
(2)復合詞中每個單詞的第一個字母大寫。除了規則5.1.1.1以外,避免使用下劃線。
(3)類、類型定義和枚舉型名的第一個字母大寫。
(4)函數名是復合詞的,第一個詞採用全部小寫,隨後每個單詞採用第一個字母大寫,其它字母小寫方式;如果是單個詞的,採用全部小寫方式。
(5)循環變數可採用i, j, k等,不受上述規則限制。
(6) 類的成員變數應採用m_開頭。
(7) 全局變數詞頭為g_ 。
(8) 臨時變數詞頭為tmp_ 。
(9) 對結構體內的變數命名, 遵循變數的具體含義命名原則
(10)用小寫字母的前綴表示變數的類型,前綴的下一個字母用大寫。
表 1
詞頭 類型 詞頭 類型
ch char l long
i integer u unsigned
b boolean p pointer
f float lp long pointer
d double s string
st structure sz ASCII string
by byte n short int
H handle x,y 分別為x,y坐標
dw DWORD fn function
表 2
詞頭 變數名 詞頭 變數名
task task sig signal
sb binary semaphores wd watchdog
sm mutual exclusion tm timer
sc counting semaphores msg message
pipe pipe
例:
#define ARRAY_SIZE 24 /*規則5.1.1.1*/
int g_iFlag;
class MyClass /*規則5.1.1.3*/
{
};
void someFunc( ) /*規則5.1.1.2和5.1.1.4*/
{
int nArray[ARRAY_SIZE];
unsigned char uchByte;
char szName[ ];
char *pszName = szName;
}
(11)有些詞頭(如p和u)可以和其它詞頭組合。
例:WDOG_ID wdId;
WDOG_ID g_wdId; /*全局watchdog Id,故以g_開頭*/
1.1.2名字的長度一般不要過長或過短。過長的名字會增加工作量,使程序邏輯流程變得模糊;過短的名字無法表達符號的實際意義。約定長度范圍:3-31;
1.2數據和函數說明
1.2.1數據說明次序應當規范化,使數據屬性容易查找,也有利於測試、排錯和維護。說明的先後次序應固定,應按邏輯功能排序,邏輯功能塊內建議採用下列順序:整型說明、實型說明、字元說明、邏輯量說明。
1.2.2如果設計了一個復雜的數據結構,應當通過注釋對其變數的含義、用途進行說明。
1.2.3在函數的聲明中使用異常聲明。
如:void f() throw(toobig, toosmall, divzero);
在聲明一個函數時,將它所拋出的異常列出,便於函數的使用者了解可能會發生哪些異常。
1.3 程序注釋
1.3.1程序注釋是程序員與日後的程序讀者之間通信的重要手段之一,注釋分為文件注釋、函數注釋和功能注釋。
1.3.2正規程序的注釋應注意:
——注釋行的數量佔到整個源程序的1/3到1/2。
1.3.3文件注釋位於整個源程序的最開始部分,注釋後空兩行開始程序正文。它包括:
——程序標題。
——目的、功能說明。
——文件作者、最後修改日期等說明。
例:
./********************************************************************
(空一行)
標題: Demo.c
功能: 測試VxWorks的各種系統調用.
說明:
該程序測試各種VxWorks的系統調用函數。包括任務(taks)的創建、掛起及任務間通過信號燈實現同步,通過消息隊列 進行通訊。
程序創建了兩個任務:一個高優先順序的任務和一個低優先順序的任務。兩個任務間通過一個二進制的信號燈進行同步,通過消息隊列進行通訊。
當前版本: x.x
修改信息: 2000.06.05 John, Initial Version
2000.07.05 Tom, Bug xxxx fixed
**************************************************************/
(空2行,開始程序正文)
1.3.4 函數注釋通常置於每函數或過程的開頭部分,它應當給出函數或過程的整體說明對於理解程序本身具有引導作用。一般包括如下條目:
——模塊標題。
——有關本模塊功能和目的的說明。
——調用格式
——介面說明:包括輸入、輸出、返回值、異常。
——演算法。如果模塊中採用了一些復雜的演算法。
例:
file://(/注釋開頭應和上一函數空兩行)
(注釋開頭與上一函數最後一行間隔兩行)
/********************************************************************
標題:assignmentComplete
功能:BSC=>MSC消息生成函數,生成assignment_complete指配完成消息(BSMAP消息) .
格式:
int assignmentComplete(int iCellId, int iServiceChannnelNum, char *pszMSGData) throw(exception1, exception2)
輸入:
int iCellId: MS所在的小區識別
iCellId取值:0x00-——0xff
int iServiceChannnelNum:MS所佔的業務信道號碼
輸出:
char * pszMSGData:指配完成消息數據
返回值: 0x00正常
異常:exception1異常情況1, exception2異常情況2
********************************************************************/
( 注釋後直接開始程序正文,不空行。)
1.3.5功能性注釋嵌在源程序體中,用於描述其後的語句或程序段做什麼工作,也就是解釋下面要做什麼,或是執行了下面的語句會怎麼樣。而不要解釋下面怎麼做,因為解釋怎麼做常常與程序本身是重復的。
例:
/*把 amount 加到 total中*/
total = amount + total;
這樣的注釋僅僅是重復了下面的程序,對於理解它的工作並沒有什麼作用。而下面的注釋,有助於讀者理解。
/*將每月的銷售額amount加到年銷售額total中*/
total = amount + total;
1.4 函數編寫應盡可能短小精悍,一般不超過兩屏,以便於調試和理解。
1.5語句結構
為保證語句結構的清晰和程序的可讀性,在編寫軟體程序時應注意以下幾個方面的問題:
——在一行內只寫一條語句,並採用空格、空行和移行保證清楚的視覺效果。
——每一個嵌套的函數塊,使用一個TAB縮進(可以設定為4個空格),大括弧必須放在條件語句的下一行,單獨成一行,便於匹對:
如,有一段程序如下:
for(i=1;i<n-1;i++){ t=1; for(j=i+1;j<n;j++){
if(a[j]<a[t] ) t=j; if(t!=i ){work=a[t];a[t]=a[I];a[I]=work;}}}
應寫為
for( i=1; i<n-1; i++)
{
t=1;
for(j = i+1; j<n; j++)
{
if(a[i]<a[j])
t=j;
if(t!=1)
{ .5.
Q/ECC/BJ 010—2001
work=a[t];
a[t]=a[i];
a[i]=work;
}
}
}
——文件之中不得存在無規則的空行,比如說連續十個空行。
一般來講函數與函數之間的空行為2-3行;
在函數體內部,在邏輯上獨立的兩個函數塊可適當空行,一般為1-2行。
——程序編寫首先應考慮清晰性,不要刻意追求技巧性而使得程序難以理解。
——每行長度盡量避免超過屏幕寬度,應不超過80個字元。
——除非對效率有特殊要求,編寫程序要作到清晰第一,效率第二。
——盡可能使用函數庫。
——盡量用公共過程或子程序去代替重復的功能代碼段。要注意,這個代碼應具有一個獨立的功能,不要只因代碼形式一樣便將其抽出組成一個公共過程或子程序。
——使用括弧清晰地表達算術表達式和邏輯表達式的運算順序。如將 x=a*b/c*d 寫成 x=(a*b/c)*d可避免閱讀者誤解為x=(a*b)/(c*d)。
——避免不必要的轉移。
——避免採用過於復雜的條件測試。
——避免過多的循環嵌套和條件嵌套。
——建議不要使用 *=,^=, /=等運算符。
——一個函數不要超過200行。一個文件應避免超過2000行。
——盡量避免使用go to語句。
——避免採用多賦值語句,如x = y = z ;
——不鼓勵採用?:操作符,如z = (a>b)?a:b;
——不要使用空的if else 語句。如
if(cMychar >= 『A』)
if(cMychar <= 『Z』)
printf(「This is a letter \n」);
else
printf(「This is not a letter \n」);
else到底是否定哪個if容易引起誤解。可通過加{}避免誤解。
——盡量減少使用「否定」條件的條件語句。如:
把 if( !( (cMychar<』0』) || (cMychar>』9』) ) )
改為if( (cMychar>=』0』) && (cMychar<=』9』) )
4. c語言寫程序的基本格式是什麼樣子的
第一個要裝進行囊和你一起前進是「規范的格式」,有很多教科書,參考書,不太注重程序的格式的問題,寫出的程序就象一堆堆的垃圾一樣,這也導致了現在很多人寫的程序中有很多的廢碼,垃圾代碼,這和那些入門的書有非常大的關系,要把那些作者都拿來打打PP。真正的商業程序絕對是規范的,張三寫的程序和李四的程序格式大致相同,各種標識符的命名規則一樣,否則誰也看不懂你寫的程序。如果寫出來的代碼誰也看不懂,那絕對是垃圾。如果要把那些垃圾翻半天,勉強才把金子找出來,那這樣的程序不如不要,還不如重新寫過,這樣,思路會更清楚一點。所以說,規范的格式是入門的基礎。那這個規范的格式包括什麼呢?不少啊,要堅持才能做到!長標志符命名,代碼縮進,一對大括弧范圍不超過一屏幕,等等。
第二個要裝進行囊的是耐心,所謂工欲善其事,必先利其器。要想成功,沒有一個相對平淡的過程是不可能的。這不僅僅指你在學習過程中要有耐心,要循序漸進,而且也說的是另一個重要的方面:調式程序。調試是寫程序過程中一個重要的方面,如果有人能一次寫成程序,牛啊,而且是大牛,不光是大牛,還是老子騎的那頭青牛,凡人是做不道的!調試是每個程序必定經歷的歷程。經常有同學問我:老師,我的程序完全沒錯誤啊,都是照書抄的啊!怎麼就運行不出來呢?對於這個問題我也看不出來!你們有問題可以找我,找其他的老師,老師找誰啊?李師父?那是很荒謬的!我就只好坐下來調試,這個說實話,調試是很枯燥的,所以有同學抱怨說我操作太快,不理解為什麼要這樣,為什麼要那樣,我的脾氣不太好,一煩躁就會罵人地,所以,這個就需要你們自己修煉內功了!
5. 說出幾條編寫規范C語言需要注意的問題,有助於自己或別人以後讀懂你編的程序
1. 基本要求
1.1 程序結構清析,簡單易懂,單個函數的程序行數不得超過100行。
1.2 打算干什麼,要簡單,直接了當,代碼精簡,避免垃圾程序。
1.3 盡量使用標准庫函數和公共函數。
1.4 不要隨意定義全局變數,盡量使用局部變數。
1.5 使用括弧以避免二義性。
2.可讀性要求
2.1 可讀性第一,效率第二。
2.2 保持注釋與代碼完全一致。
2.3 每個源程序文件,都有文件頭說明,說明規格見規范。
2.4 每個函數,都有函數頭說明,說明規格見規范。
2.5 主要變數(結構、聯合、類或對象)定義或引用時,注釋能反映其含義。
2.7 常量定義(DEFINE)有相應說明。
2.8 處理過程的每個階段都有相關注釋說明。
2.9 在典型演算法前都有注釋。
2.10 利用縮進來顯示程序的邏輯結構,縮進量一致並以Tab鍵為單位,定義Tab為 6個位元組。
2.11 循環、分支層次不要超過五層。
2.12 注釋可以與語句在同一行,也可以在上行。
2.13 空行和空白字元也是一種特殊注釋。
2.14 一目瞭然的語句不加註釋。
2.15 注釋的作用范圍可以為:定義、引用、條件分支以及一段代碼。
2.16 注釋行數(不包括程序頭和函數頭說明部份)應占總行數的 1/5 到 1/3 。
3. 結構化要求
3.1 禁止出現兩條等價的支路。
3.2 禁止GOTO語句。
3.3 用 IF 語句來強調只執行兩組語句中的一組。禁止 ELSE GOTO 和 ELSE RETURN。
3.4 用 CASE 實現多路分支。
3.5 避免從循環引出多個出口。
3.6 函數只有一個出口。
3.7 不使用條件賦值語句。
3.8 避免不必要的分支。
3.9 不要輕易用條件分支去替換邏輯表達式。
4. 正確性與容錯性要求
4.1 程序首先是正確,其次是優美
4.2 無法證明你的程序沒有錯誤,因此在編寫完一段程序後,應先回頭檢查。
4.3 改一個錯誤時可能產生新的錯誤,因此在修改前首先考慮對其它程序的影響。
4.4 所有變數在調用前必須被初始化。
4.5 對所有的用戶輸入,必須進行合法性檢查。
4.6 不要比較浮點數的相等,如: 10.0 * 0.1 == 1.0 , 不可靠
4.7 程序與環境或狀態發生關系時,必須主動去處理發生的意外事件,如文件能否
邏輯鎖定、列印機是否聯機等。
4.8 單元測試也是編程的一部份,提交聯調測試的程序必須通過單元測試。
5. 可重用性要求
5.1 重復使用的完成相對獨立功能的演算法或代碼應抽象為公共控制項或類。
5.2 公共控制項或類應考慮OO思想,減少外界聯系,考慮獨立性或封裝性。
5.3 公共控制項或類應建立使用模板。
6. C語言:下面要求的C程序怎麼編
先定義一個字元型數組,把這一串字元串都進去,以後撤出他的串長,然後對這個字元串以字元為單位進行一次冒泡排序就可以了。具體的程序代碼和運行情況見圖片。
程序代碼文本:
#include<stdio.h>
int main()
{ int i,j,n;
char s[100],t;
scanf("%s",s);
for(n=0; s[n]; n++);
for(i=0; i<n-1; i++)
for(j=0; j<n-1-i; j++)
if(s[j]>s[j+1])
{ t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
puts(s);
return 0;
}
7. 關於c語言代碼規范
C語言對「 」外的空格忽略
8. c語言代碼編寫的格式
C語言 程序代碼編寫規范
(初級程序員 討論版)
前言
一個好的程序編寫規范是編寫高質量程序的保證。清晰、規范的源程序不僅僅是方便閱讀,更重要的是能夠便於檢查錯誤,提高調試效率,從而最終保證軟體的質量和可維護性。
說明
l 本文檔主要適用於剛剛開始接觸編程的初學者。
l 對於具有一定工程項目開發經驗的程序員,建議學習C語言程序代碼編寫規范—高級版。
目錄
1 代碼書寫規范
2 注釋書寫規范
3 命名規范
4 其它一些小技巧和要求
1 代碼書寫規范
1.1函數定義
花括弧: { }
每個函數的定義和說明應該從第1列開始書寫。函數名(包括參數表)和函數體的花括弧應該各佔一行。在函數體結尾的括弧後面可以加上注釋,注釋中應該包括函數名,這樣比較方便進行括弧配對檢查,也可以清晰地看出來函數是否結束。
範例1:函數的聲明
void matMyFunction(int n)
{
……
} /* matMyFunction*/
1.2空格與空行的使用
要加空格的場合
l 在逗號後面和語句中間的分號後面加空格,如:
int i, j, k;
for (i = 0; i < n; i++)
result = func(a, b, c);
l 在二目運算符的兩邊各留一個空格,如
a > b a <= b i = 0
l 關鍵字兩側,如if () …, 不要寫成if() …
l 類型與指針說明符之間一定要加空格:
char *szName;
不加空格的場合
l 在結構成員引用符號.和->左右兩加不加空格:
pStud->szName, Student.nID
l 不在行尾添加空格或Tab
l 函數名與左括弧之間不加空格:
func(…)
l 指針說明符號*與變數名間不要加空格:
int *pInt; 不要寫成: int * pInt;
l 復合運算符中間不能加空格,否則會產生語法錯誤,如:
a + = b a < = b 都是錯誤的
空行與換行
l 函數的變數說明與執行語句之間加上空行;
l 每個函數內的主要功能塊之間加空行表示區隔;
l 不要在一行中寫多條語句.
範例2:空行與換行
int main()
{
int i, j, nSum = 0; //變數說明
for (i = 0; i < 10; i++) //執行代碼
{
for (j = 0; j < 10; j++)
{
nSum += i;
}
}
}
1.3縮進的設置
根據語句間的層次關系採用縮進格式書寫程序,每進一層,往後縮進一層
有兩種縮進方式:1,使用Tab鍵;2,採用4個空格。
整個文件內部應該統一,不要混用Tab鍵和4個空格,因為不同的編輯器對Tab鍵的處理方法不同。
1.4折行的使用
· 每行的長度不要超過80個字元,當程序行太長時,應該分行書寫。
· 當需要把一個程序行的內容分成幾行寫時,操作符號應該放在行末。
· 分行時應該按照自然的邏輯關系進行,例如:不要把一個簡單的邏輯判斷寫在兩行上。
· 分行後的縮進應該按照程序的邏輯關系進行對齊。例如:參數表折行後,下面的行應該在參數表左括弧的下方。
範例2:折行的格式
dwNewShape = matAffineTransform(coords, translation,
rotation);
if (((new_shape.x > left_border) &&
(new_shape.x < right_border)) &&
((new_shape.y > bottom_border) &&
(new_shape.y < top_border)))
{
draw(new_shape);
}
1.5嵌套語句(語句塊)的格式
對於嵌套式的語句--即語句塊(如,if、while、for、switch等)應該包括在花括弧中。花括弧的左括弧應該單獨佔一行,並與關鍵字對齊。建議即使語句塊中只有一條語句,也應該使用花括弧包括,這樣可以使程序結構更清晰,也可以避免出錯。建議對比較長的塊,在末尾的花括弧後加上注釋以表明該語言塊結束。
範例3:嵌套語句格式
if (value < max)
{
if (value != 0)
{
func(value);
}
}
} else {
error("The value is too big.");
} /* if (value < max) */
2 注釋書寫規范
注釋必須做到清晰,准確地描述內容。對於程序中復雜的部分必須有注釋加以說明。注釋量要適中,過多或過少都易導致閱讀困難。
2.1注釋風格
· C語言中使用一組(/* … */)作為注釋界定符。
· 注釋內容盡量用英語方式表述。
· 注釋的基本樣式參考範例4。
· 注釋應該出現在要說明的內容之前,而不應該出現在其後。
· 除了說明變數的用途和語言塊末尾使用的注釋,盡量不使用行末的注釋方式。
範例4:幾種注釋樣式
/*
* ************************************************
* 強調注釋
* ************************************************
*/
/*
* 塊注釋
*/
/* 單行注釋 */
//單行注釋
int i; /*行末注釋*/
2.2何時需要注釋
· 如果變數的名字不能完全說明其用途,應該使用注釋加以說明。
· 如果為了提高性能而使某些代碼變得難懂,應該使用注釋加以說明。
· 對於一個比較長的程序段落,應該加註釋予以說明。如果設計文檔中有流程圖,則程序中對應的位置應該加註釋予以說明。
· 如果程序中使用了某個復雜的演算法,建議註明其出處。
· 如果在調試中發現某段落容易出現錯誤,應該註明。
3 命名規范
3.1常量、變數命名
l 符號常量的命名用大寫字母表示。如:
#define LENGTH 10
l 如果符號常量由多個單詞構成,兩個不同的單詞之間可以用下劃線連接。如:
#define MAX_LEN 50
變數命名的基本原則:
l 可以選擇有意義的英文(小寫字母)組成變數名,使人看到該變數就能大致清楚其含義。
l 不要使用人名、地名和漢語拼音。
l 如果使用縮寫,應該使用那些約定俗成的,而不是自己編造的。
l 多個單片語成的變數名,除第一個單詞外的其他單詞首字母應該大寫。如:
dwUserInputValue。
3.2函數命名
函數命名原則與變數命名原則基本相同。對於初學者,函數命名可以採用「FunctionName」的形式。
4 其它一些小技巧和要求
l 函數一般情況下應該少於100行
l 函數定義一定要包含返回類型,沒有返回類型加void
l 寫比較表達式時,將常量放在左邊
10 == n
NULL != pInt
l 指針變數總是要初始或重置為NULL
l 使用{}包含復合語句,即使是只有一行,如:
if (1 == a)
{
x = 5;
}
http://home.ustc.e.cn/~danewang/c/CodingStandards.html
9. c語言代碼編寫
(1)
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intisprime(intnumber){
inti;
if(number>2&&!(number&1)||number<2)
return0;
for(i=3;i*i<=number;i+=2)
if(!(number%i))
return0;
return1;
}
intmain(void){//testing...
inti;
for(i=2;i<100;i++)
if(isprime(i))
printf("%3d",i);
printf(" ");
return0;
}
(2)
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intGcd(inta,intb){
intr;
while(b){
r=a%b;
a=b;
b=r;
}
returna;
}
intLcm(inta,intb){
returna/Gcd(a,b)*b;
}
intmain(void){//Testing...
intx,y;
while(1){
printf("Inputx&y(int>0)... ");
if(scanf("%d%d",&x,&y),x>0&&y>0)
break;
printf("Error,redo:");
}
printf("TheGcdis%d. TheLcmis%d. ",Gcd(x,y),Lcm(x,y));
return0;
}
10. 請問用C語言編寫程序的格式是什麼
如:
1.#include
「
引入頭文件(主要引入函數庫,如stdio.h;數學函數」)
2. int main(void ) {
「
主函數必須是小寫的(程序唯一入口,前面的int、void等都可省略,但「括弧」不能。大括弧內包含的內容為程序主體」
Int num = 10
3.printf(「會好的」);
Printf(「我今年%d歲了\n」,num);
「\n:表示換行;%d表示在這里帶入定義的函數num =
10,所以後面必須跟『num』這個標識符」
}
首先,在程序中注意一些小問題。
1.程序要在英文輸入法的界面輸入,不然程序會報警。
2.程序的格式要有一定的層次關系。
3.在定義函數(標識符)時注意不要選擇了關鍵字。最好在「=」兩邊都空一格。
4.在定義函數時注意數據類型的取值范圍。如:
整型
[signed]int
-2147483648~+2147483648
無符號整型
unsigned[int]
0~4294967295
短整型 short
[int] -32768~32768
無符號短整型
unsigned
short[int]
0~65535
長整型 Long
int
-2147483648~+2147483648
無符號長整型 unsigned
[int]
0~4294967295
字元型[signed]
char
-128~+127
無符號字元型 unsigned
char
0~255
單精度
float
3.4 x 10^(-38)~ 3.4 x
10^(+38)
雙精度
double
1.7 x 10^(-308)~ 1.7 x
10^(+308)
長雙精度 long
double 1.7
x 10^(-308)~ 1.7 x
10(+308)