1. 文件排版
1.1 头文件
(1)系统头文件应用:#include <iostream>
(2)只引用需要的头文件
1.2 空行
#include
部分、宏定义部分、全局常量部分、全局变量部分、函数和函数之间,用空行隔开。
//例如:C++基本框架格式
#include <iostream> //头文件
using namespace std; //命名空间
int main(){ //主函数
//TODO...
return 0;
}
2. 注释
(1) 关键函数必须写上注释,说明函数的用途
(2)除了特别情况,注释写在代码之前,不要放到代码行之后。
(3)关键代码注释,包括但不限于:赋值,函数调用,表达式,分支等等
(4)善未实现完整的代码,或者需要进一步优化的代码,应加上 // TODO …
(5)对于较大的代码块结尾,如for,while,do...while
等,可加上 // end for|while|do
//例如:for循环
for(int i = 0; i < n; i++){
//语句1;
//语句2;
//语句3;
//TODO...
} //end for :表示此for循环到此结束,可以避免大括号混淆
3. 命名规则
3.1 基本原则
(1)含义清晰,不易混淆;
(2)不和其它模块、系统关键词相冲突
3.2 变量命名规则
(1)变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成
(2)第一个字母必须是字母或者下划线开头
(3)不能使用C++关键字来命名变量,以免冲突
(4)变量名区分大小写
(5)C++目前支持在变量中使用美元符号"$"
// 编译器:MSVC 19.29
// C++标准:C++14
#include <iostream>
using namespace std;
int main() {
int var = 1;
int var$ = 2;
int v$ar = 3;
int $var = 4;
cout << var << var$ << v$ar << $var << endl;
}
//感谢大佬“sjc_0910”补充
4. 代码书写建议
4.1 关于添加空格和空行的一些建议
(1)函数名之后不要留空格,紧跟左括号'(',以与关键字区别。
(2)‘,’和‘;’之后要留空格。在for语句中的‘;’其后要留空格,如 for (i = 0; i < 5; i++)
(3)赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ =”、“ +=” 、“>=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ <<”、 “ ^”等二元操作符的前后应当加空格。
(4)单目运算符如“ !”、“ ~”、“ ++”、“ --”、“ &”(地址运算符)等前后不加空格。
//下面这段代码就会显得不优雅,看着有些别扭。
void func(int a,int b,int c,int d){
if(a>=0){
if(a>=b&&c>=d){
int * x = & a;
//TODO...
}
}
}
我们希望将它改为以下形式:
void func(int a, int b, int c, int d){
if (a >= 0){
if ((a >= b) && (c >= d)){
int *x = &a;
//TODO...
}
}
}
4.2 关于命名的建议
(1)变量,函数,文件命名应该具有描述性,最好采用英文单词或其组合(不要使用拼音,或者无意义的abc之类的,除了像for (i=0; i<5; i++)中的i这样的),以便记忆和阅读。
(2)函数名用大写字母开头的单词组合而成。
例如:
void Draw(); //绘制
void DrawImage(); //绘制图像
(3)变量和参数用小写字母开头的单词组合而成。
例如:
int value;
void SetValueMode(int valueMode);
(4)常量全用大写的字母,用下划线分割单词。
例如:
const int MAX = 100; //最大值
const int MAX_LENGTH = 100; //最大长度
4.3 关于添加注释的一些建议
(1)在C++中注释主要有两种,程序块的注释常采用“ /* …*/”,行注释一般采用“ //…”。
(2)注释很重要,但是类型和变量命名意义明确要比通过注释解释模糊命名好得多。
(3)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性
(4)注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
4.4 关于if语句中的变量“与零值比较”的一些建议
(1)不可将布尔变量直接与 TRUE、 FALSE 或者 1、 0 进行比较。假设布尔变量名字为 flag,它与零值比较的标准 if 语句如下:
if (flag) // 表示 flag 为真
if (!flag) //表示 flag 为假
(2)应当将整型变量用“ ==”或“!=”直接与 0 比较。
假设整型变量的名字为 value,它与零值比较的标准 if 语句如下:
if (value == 0)
if (value != 0)
(3)不可将浮点变量用“ ==”或“!=”与任何数字比较。无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避免将浮点变量用“ ==”或“!=”与数字比较,应该设法转化成“ >=”或“ <=”形式。
假设浮点变量的名字为 f,应当将
if (f == 0.0) // 隐含错误的比较
修改为
const float EPSINON = 0.00001;
if ((f >= -EPSINON) && (f <= EPSINON)) //通过精度来比较
其中 EPSINON 是允许的误差(即精度)。
(4)应当将指针变量用“ ==”或“!=”与NULL 比较。
假设指针变量的名字为 p,它与零值比较的标准 if 语句如下:
if (p == NULL) // p 与 NULL 显式比较,强调 p 是指针变量
if (p != NULL)
如果不足之处欢迎随时补充~