大概是一直在說的代碼規範,大概是玩一玩,以上。html
參考原文:連接ios
相關節選:c++
4 程序的版式git
4.4規則:較長的語句(>80字符)要分紅多行書寫。github
4.5規則:不容許把多個短語句寫在一行中,即一行只寫一條語句。緩存
4.6 規則:if、for、do、while、case、switch、default等語句自佔一行,
且if、for、do、while等語句的執行語句部分不管多少都要加括號{}。服務器4.7規則:代碼行以內應該留有適當的空格
象if、for、while 等關鍵字以後應留一個空格再跟左括號‘( ’, 以突出關鍵字。
2)函數名以後不要留空格, 緊跟左括號’(’ , 以與關鍵字區別。
4)‘ ,’ 以後要留空格, 如Function(x, y, z)。若是‘ ;’ 不是一行的結束符號, 其後也要留空格
二元操做符的先後應當加空格。yii5 註釋tcp
5.1規則:源文件頭部應進行註釋,列出:生成日期、做者、模塊目的/功能等。分佈式
/************************************************************
FileName: test.cpp
Author: Version : Date:
Description: // 模塊描述
Version: // 版本信息
Function List: // 主要函數及其功能
1. -------
History: // 歷史修改記錄
5.2規則:函數頭部應進行註釋,列出:函數的目的/功能、輸入參數、輸出參數、返回值等。
/*************************************************
Description: // 函數功能、性能等的描述
Input: // 輸入參數說明,包括每一個參數的做
// 用、取值說明及參數間關係。
Output: // 對輸出參數的說明。
Return: // 函數返回值的說明
Others: // 其它說明
*************************************************/5.6建議:註釋的主要目的應該是解釋爲何這麼作,而不是正在作什麼。
若是從上下文不容易看出做者的目的,說明程序的可讀性自己存在比較大的問題,應考慮對其重構。5.7建議:避免非必要的註釋。
6 標識符命名
6.1規則:命名儘可能使用英文單詞,力求簡單清楚,避免使用引發誤解的詞彙和模糊的縮寫,令人產生誤解。
說明:
較短的單詞可經過去掉「元音」造成縮寫;
較長的單詞可取單詞的頭幾個字母造成縮寫;
一些單詞有你們公認的縮寫。
示例:以下單詞的縮寫可以被你們基本承認。
temp 可縮寫爲 tmp
flag 可縮寫爲 flg
statistic 可縮寫爲 stat
increment 可縮寫爲 inc
message 可縮寫爲 msg6.4規則:常量、宏和模板名採用全大寫的方式, 每一個單詞間用下劃線分隔。
6.9建議:函數名以大寫字母開頭,採用謂-賓結構(動-名),且應反映函數執行什麼操做以及返回什麼內容。
6.10建議:類、結構、聯合、枚舉的命名須分別以C、S、U、E開頭,其餘部分聽從通常變量命名規範。
7 可讀性
- 7.3規則:涉及物理狀態或者含有物理意義的常量,避免直接使用數字,必須用有意義的枚舉或常量來代替。
8 變量、結構
- 8.2規則:變量,特別是指針變量,被建立以後應當及時把它們初始化,以防止把未被初始化的變量當成右值使用。
9 函數、過程
9.7儘可能寫類的構造、拷貝構造、析構和賦值函數 ,而不使用系統缺省的。
9.8建議:對於不須要拷貝構造函數時,應顯式地禁止它,避免編譯器生成默認的拷貝構造函數。
9.10建議:禁止編寫依賴於其餘函數內部實現的函數。
9.12建議:函數實現中不改變內容的參數要定義成const。
10 c++專用規範
10.3規則:主動使用const,避免使用宏。
10.5規則:儘量局部地聲明變量。
/*************************************************************** FileName: Main.cpp Author:newmoon Version :2.0 Date:16/07/25 Description: 輸入一個字符串算式,拆分數字和運算符並輸出 Function List: int main() 輸入一個字符串算式,拆分數字和運算符並輸出 History: <author> <time> <version > <desc> newmoon 16/07/25 2.0 代碼規範相關 **************************************************************/ #include"Scan.h" #include"Print.h" #include<iostream> #include<queue> using namespace std; int main() { Scan getStr; Print printQue; string s_input; //輸入的字符串 queue<string> qs_output; //輸出的隊列 cin >> s_input; //調用Scan類的對象中的相應函數 //以獲取拆分好的隊列 qs_output = getStr.ToStringQueue(s_input); //調用Print類的對象中的相應函數 //以輸出拆分好的隊列 printQue.PrintStringQueue(qs_output); return 0; }
#ifndef SCAN_H #define SCAN_H #include<iostream> #include<queue> using namespace std; class Scan { public: //接收一個字符串算式, //將算式中的數字和運算符拆分並存入一個隊列, //最後返回這個隊列。 queue<string> ToStringQueue(string s_input); }; #endif
/************************************************************************** FileName: Scan.cpp Author:newmoon Version :2.0 Date:16/07/25 Description: 定義實現Scan類中的相關方法 Function List: queue<string> ToStringQueue(string s_input) 拆分算式中數字和運算符 History: <author> <time> <version > <desc> newmoon 16/07/25 2.0 代碼規範相關 **************************************************************************/ #include"Scan.h" #include<iostream> #include<queue> using namespace std; /******************************************************** Description:接收一個字符串算式, 將算式中的數字和運算符拆分並存入一個隊列, 最後返回這個隊列。 Input:一個字符串類型的算式 Output:無 Return:一個元素爲string對象的隊列 Others:算式中的數字位數(包括小數位)超過十位則報錯 ********************************************************/ queue<string> Scan::ToStringQueue(string s_input) { queue<string> qs_output; //返回的隊列 string t_str; //暫存鏈接起來的數字的中間變量 int cnt = 0; //統計數字位數的變量 //遍歷整個算式字符串以拆分數字和運算符 //碰到數字先接到中間變量上 //碰到運算符則先前的數字入隊 for (int i = 0; i<s_input.size(); i++) { //遍歷到運算符 if (s_input[i] == '+' || s_input[i] == '-' || s_input[i] == '*' || s_input[i] == '/' || s_input[i] == '(' || s_input[i] == ')') { //中間變量若不爲空(如以"-"開頭) //中間變量裏接起來的數字入隊 if (!t_str.empty()) { qs_output.push(t_str); //清空中間變量以便下次鏈接 t_str.clear(); //重置位數統計以便下次統計 cnt = 0; } //遍歷到的運算符入隊 switch (s_input[i]) { case'+': qs_output.push("+"); break; case'-': qs_output.push("-"); break; case'*': qs_output.push("*"); break; case'/': qs_output.push("/"); break; case'(': qs_output.push("("); break; case')': qs_output.push(")"); break; } } //遍歷到數字 else { //接到中間變量上以組成數字 t_str = t_str + s_input[i]; //統計數字位數 if (s_input[i] != '.') { cnt++; } if (cnt > 10) { cout << "數字位數超過十位" << endl; exit(1); } //以數字結尾的算式須要特判 //避免漏掉最後一個數字 if (i == s_input.size()-1) { qs_output.push(t_str); } } } return qs_output; }
#ifndef PRINT_H #define PRINT_H #include<iostream> #include<queue> using namespace std; class Print { public: //輸出接收的隊列 void PrintStringQueue(queue<string> qs_output); }; #endif
(明明是同樣的星號。。。)
/************************************************************************* FileName: Print.cpp Author:newmoon Version :2.0 Date:16/07/25 Description: 定義實現Print類中的相關方法 Function List: void PrintStringQueue(queue<string> qs_output) 輸出一個接收的隊列 History: <author> <time> <version > <desc> newmoon 16/07/25 2.0 代碼規範相關 **************************************************************************/ #include"Print.h" #include<iostream> #include<queue> using namespace std; /************************************ Description:輸出一個接收的隊列 Input:元素類型爲string對象的隊列 Output:隊列中的元素,即string對象 Return:無 Others:無 *************************************/ void Print::PrintStringQueue(queue<string> qs_output) { //循環輸出直到隊列爲空 //以此來輸出整個隊列 while(!qs_output.empty()) { cout << qs_output.front() << endl; //彈出已輸出的隊首元素以準備下一次輸出 qs_output.pop(); } }
大概是又去看了看git相關的東西,原來只是爲了完成上傳代碼的任務,不知道是什麼東西,反正就照着教程一步一步作就是了,如今再回過頭去看,感受比一臉懵逼好點。下面只是一些本身的理解,助教學長後來卻是給了一些很不錯的教程,適合小白,還有學長本身寫的,連接以下:學長、廖雪峯、其餘一、其餘二、其餘三(不必全看,只是有些有時莫名不能訪問,因此多列幾個)
git大概是個分佈式的版本控制系統,感受寫論文或代碼的話可能會用到。所謂版本控制,就是一個東西改來改去有不少個版本,而後它會幫你記錄各個版本,能夠看版本間的不一樣,還能夠回退到各個版本。分佈式大概是這些版本就存在本身的電腦上,而不是存在一箇中心服務器,固然也能夠上傳到遠程的倉庫,好比傳到github上(免費的,還開源 ,感受很厲害)。
使用的話,目前只用到了一些命令(也是命令行吧,長得和cmd挺像),如今是大概知道這些命令到底作了什麼。git init 會在當前的目錄下初始化一個倉庫,大概就是用來存各個版本的地方,是會被隱藏起來的.git文件。git add 會把文件添加到倉庫的緩存區,文件也會被追蹤起來(不是很懂)。git commit 會把倉庫緩存區的文件正式變成倉庫裏的一個版本,還要跟上版本信息。git push 就是把文件傳到遠程的倉庫上,固然你要先添加一個遠程的倉庫。還有git status 能夠看當前目錄下狀態,有哪些文件沒被追蹤,有哪些文件追蹤還沒存到倉庫裏,所有存到倉庫裏的話那工做目錄就是乾淨的(clear)。目前基本這幾個就夠用了。