c++的代码规范
为了让我们在书写代码的时候更加规范,让读者的观感提升,我们不仅要遵守语法规则,更需要遵守一套写法规范,以提升代码可读性。
为了更好的阅读,笔者从开头写到结尾。
一、头文件 & 命名空间
- 输入输出
cin/cout必须包含
#include <iostream> // 标准输入输出
#include <vector> // 使用vector需要
using namespace std; // OJ常用,省去std::前缀;大型项目不推荐
:#include 放在最顶部,不能写在函数里面
#include是预处理指令,末尾不加;
二、变量声明
- 变量必须先声明,后使用
int a; // 声明
a = 10;
- 同一作用域,不能重复定义同名变量
int x=5;
int x=10;
- 局部变量(函数内部)不会自动初始化,值是随机垃圾值;全局变量默认初始化为 0。
三、数组
int arr[10005];
- 下标从 0 开始;数组大小 N,合法下标:
0 ~ N-1 - ❌ 数组越界:访问
arr[N]、负数下标arr[-1]→ 未定义行为,可能段错误 - 栈数组(写在 main / 函数内)大小有限;超大数组建议写在全局。
int num[10005]; //全局,安全
int main(){
int a[10005]; //局部栈数组,小尺寸没问题,几百万就栈溢出段错误
}
四、函数语法
// 返回类型 函数名(参数列表)
void Merge(int m, int n, int l, int a[]){
//函数体
}
- 函数写在调用之前,或者提前写函数声明(原型)
如果你把 Mergesort 写在 main 后面,要在 main 前面写原型:
void Mergesort(int left,int right,int a[]);
- 参数数组
int a[]本质是指针,函数内部不能直接用 a.size () void代表无返回值,函数里面不能 return 一个值;有返回值函数必须 return 对应类型数据
int f(){
return 99;
}
void g(){
return; //可以,直接退出函数
}
五、分支、循环
if
if(条件){
}else if(条件){
}else{
}
条件括号不能省略;
{}只有单行语句可以省略,但刷题建议永远加上,防止 bug。
for 循环
for(初始化; 判断条件; 更新){
}
⚠️ 三个部分用分号;隔开,不是逗号,很多人写错。
while 循环
while(条件){
}
六、运算符
=赋值;==判断相等(千万不要写混)&&逻辑与;||逻辑或;!非><>=<=比较
优先级:算术 > 比较 > 逻辑运算,复杂条件建议加括号。
七、vector(你代码在用)
vector<int> d;
d.push_back(10); //尾部追加元素
d.size(); //返回元素个数,返回值是size_t(无符号整数)
⚠️ d[i] 访问下标,i 必须小于 d.size (),越界同样未定义行为,可能崩溃。
八、分号 ; 坑(高频语法错误)
for / while / if后面不要随便加分号
if(x>0);{ // ❌ 这里;代表if结束,大括号代码永远执行
cout<<x;
}
- 声明、语句末尾加分号;
#include、函数定义的{前面不加
void f() // 这里不要;
{
}
九、注释
//单行注释,到本行结束
/* 多行注释
可以跨多行 */
注释不参与编译,不会影响程序运行。
十、语法错误 vs 运行错误(重点区分,刷题必考)
- 编译错误(语法错):代码写法违反 C++ 语法,编译器直接拒绝,程序无法生成。
- 少分号、括号不匹配、变量未定义、
=和==写混、头文件缺失
- 少分号、括号不匹配、变量未定义、
- 运行时错误(段错误属于这类):语法没问题,可以编译,跑的时候崩溃。
- 数组越界、空指针、栈溢出
- 逻辑错误:编译成功,正常跑完,输出答案不对(你之前那个归并 bug)
十一、大括号规范(风格)
OJ 没有强制,两种都合法:
//风格1(你代码用的)
void Merge(){
}
//风格2
void Merge()
{
}
只要成对匹配就行,左右大括号必须配对,少一个直接编译报错。
十二、基础类型
int 整型;double浮点;char字符;bool布尔(true/false)
bool 条件:非 0 即为 true,0 代表 false

浙公网安备 33010602011771号