第2章:编程规范与代码风格
在上一章中,我们成功让计算机输出了 "Hello, World!"。但编写代码从来不只是给计算机看的指令,更是写给人(包括未来的自己)看的 "文章"------ 清晰的代码能让人快速理解逻辑,混乱的代码则会增加沟通和维护成本 。
良好的编程规范与代码风格是优秀程序员的必备素养,它不会直接影响程序的运行结果,却能显著提高代码的可读性、可维护性,还能减少潜在的逻辑错误。尤其是在团队协作中,统一的规范就像标准的书面语言,能让不同开发者无缝协作。
代码风格的核心价值在于 "让人看懂",具体体现在三个方面:
1、可读性 :你可能在几周、几个月后重新阅读自己的代码,清晰的风格能让你快速回忆起当初的设计思路,不用花费大量时间 "破译" 自己写的代码。
2、协作性 :在团队项目中,多个开发者会共同维护一份代码。统一的缩进、命名、注释风格,能让每个人都能快速理解他人的代码,避免因风格差异导致的误解。
3、减错性:规范的结构(如缩进区分代码块)和清晰的命名,能帮助你在编写时就发现逻辑漏洞,比如循环嵌套错误、变量混用等问题。
2.1 注释
注释是用自然语言解释代码的意图、功能或复杂逻辑,相当于代码的 "说明书" 。好的注释能让他人(或未来的你)快速理解代码的设计思路,而非重复代码本身的功能。
规范要求:
1、单行注释:以//开头,用于对单行代码或简短逻辑进行说明,注释内容与//之间留一个空格,如:
c
// 计算两个整数的和。
int sum = a + b;
2、多行注释:以/*开头、*/ 结尾,用于对函数、复杂模块进行大段描述。
c
/*
函数名:calculateCircleArea
功能:根据圆的半径计算面积
参数:radius - 圆的半径(非负浮点数)
返回值:圆的面积(double 类型)
*/
double calculateCircleArea (double radius) {
return 3.14159 * radius * radius;
}
注释应解释 "为什么这么做",而不是重复 "代码是什么"。比如无需注释 // 给sum赋值为a加b,但需要注释 // 此处用加法而非乘法,因为需求是求和而非乘积。
2.2 缩进
缩进的核心作用是区分不同代码块(如函数体、循环体、条件语句)的层次结构,让代码的逻辑嵌套关系 一目了然。
规范要求:通常使用一个制表符(Tab)或 4 个空格进行一级缩进,务必在整个项目中保持统一,不要混用 Tab 和空格。
示例对比:
c
// 不良风格:没有缩进,结构混乱。
int main () {
printf ("Hello,");
if (1) {
printf ("World!");
}
return 0;
}
c
// 良好风格:清晰的缩进,层次分明。
int main () {
printf ("Hello,");
if (1) {
printf ("World!");
}
return 0;
}
2.3 空格与空行
空格和空行的作用是增强代码的 "呼吸感",分隔不同的逻辑单元,避免代码挤在一起难以区分。
规范要求:
1、在运算符(+、-、*、/、= 等)两侧添加空格,如 int sum = a + b;,而非 int sum=a+b;。
2、在逗号后面添加空格,如 printf("%d", number);,而非 printf("%d",number);。
3、使用空行分隔不同的逻辑部分,比如变量定义与执行语句之间、函数与函数之间,如:
c
int main () {
// 变量定义区。
int a = 10; //在运算符(+、-、*、/、= 等)两侧添加空格。
int b = 20;
// 执行语句区。
int sum = a + b; //在运算符(+、-、*、/、= 等)两侧添加空格。
printf ("sum: % d\n", sum); //在逗号后面添加空格。
return 0;
}
2.4 命名规范
变量、函数、常量等标识符的命名,是 "自我注释" 的关键。一个清晰的名字能直接表明其用途,减少不必要的注释。
规范要求:
1、变量名 :使用有意义的名词或名词短语,明确表明变量的用途,避免使用无意义的字母(详见 第3章3.3 变量的命名规则)。
●不良命名:int a;、int temp;(无法判断用途)。
●良好命名:int student_age;(学生年龄)、int total_score;(总分)。
2、函数名:使用动词或动词短语,表明函数的操作行为,让读者一眼知道函数的功能。
●不良命名:void func1();(无意义)。
●良好命名:void calculateAverage();(计算平均值)、int getUserInput();(获取用户输入)。
3、常见风格:C 语言中最常用 "小写蛇形命名法"(单词全小写,用下划线连接),如 my_variable_name、calculate_total;也可使用驼峰命名法(首字母小写,后续单词首字母大写),如myVariableName、calculateTotal。
笔记:
- 单行注释以
//开头,注释内容与//之间留 1 个空格;多行注释以/*开头、*/结尾,适用于大段功能描述。 - 注释不宜过多或过少:过多会导致代码臃肿,过少会让复杂逻辑难以理解,关键模块(如函数功能、特殊逻辑)必须加注释。
- 注释核心原则:解释 "为什么这么做",而非重复 "代码是什么",避免冗余注释。
- 缩进、空格、命名的核心是 "统一"------ 无论选择哪种风格,整个项目必须保持一致。
- 缩进推荐使用一个制表符(Tab)或 4 个空格,严禁混用 Tab 和空格,现代 IDE 可自动实现统一缩进。
- 空格使用规范:运算符两侧、逗号后面需加空格,增强代码可读性,避免代码拥挤。
- 空行用于分隔不同逻辑单元(如变量定义区与执行语句区、函数之间),让代码结构更清晰。
- 标识符命名避免使用关键字(如 int、if、for)和系统保留名(如 printf、scanf),避免命名冲突。
- 变量命名用有意义的名词 / 名词短语(如
student_age),函数命名用动词 / 动词短语(如calculateAverage),拒绝无意义命名(如a、func1)。 - C 语言优先使用 "小写蛇形命名法"(单词全小写,下划线连接),不推荐驼峰命名法(多用于 C++、Java)。