代码不规范引发的血案:
美国的一家名为 WTS Paradigm 的企业资源规划软件(ERP)开发商的办公楼内,该公司的一名程序员持枪杀了4名同事,因他们总是不写注释,不遵循驼峰命名,最主要还天天git push -f 。当时43岁的安东尼·汤(Anthony Tong)在办公室,拿出一把事先藏起来的半自动手枪向周围4名同事开火。其他工作人员见状纷纷逃离办公楼,跑到附近的公司避难。当警察来到现场时,他竟然还想袭击警察!看来这位程序员真是被愤怒冲昏了头脑,因他的不配合,最后警察不得已向他开枪,在送往医院的途中安东尼流血过多死亡。在第二天的警方发布会上,警察说嫌疑人之前没有任何的犯罪行为,事情发生的非常突然,目前没有任何的迹象表明凶手的动机何在。
代码不规范的类型
命名不规范
注释不规范
代码缩进不规范
程序设计不规范
函数接口设计不规范
特点
可维护性低
可读性低
代码示例
不规范:
#include <stdio.h>
void port_fpga(unsigned int addr) {
//模拟
printf("对地址:0x%X执行操作\n", addr);
}
//算法设计
void port_work(int port) {
unsigned int addr;
if (port == 1) {
addr = 0x800;
} else if (port == 2) {
addr = 0x804;
} else if (port == 3) {
addr = 0x808;
} else if (port == 4) {
addr = 0x80C;
} else if (port == 5) {
addr = 0x810;
} else if (port == 6) {
addr = 0x814;
} else if (port == 7) {
addr = 0x818;
} else if (port == 8) {
addr = 0x81C;
} else if (port == 9) {
addr = 0x820;
} else if (port == 10) {
addr = 0x824;
} else if (port == 11) {
addr = 0x828;
} else if (port == 12) {
addr = 0x82C;
} else {
printf("无效端口\n");
return;
}
// ...
port_fpga(addr);
}
int main(void) {
int port;
printf("请输入端口:");
scanf("%d", &port);
port_work(port);
return 0;
}
修改后:
#include <stdio.h>
void port_fpga(unsigned int addr) {
//模拟
printf("对地址:0x%X执行操作\n", addr);
}
//算法设计
void port_work(int port) {
unsigned int addr;
if (port < 1 || port > 12) {
printf("无效端口\n");
return;
}
addr = 0x800 + (port-1) * 4;
port_fpga(addr);
}
int main(void) {
int port;
printf("请输入端口:");
scanf("%d", &port);
port_work(port);
return 0;
}
短了很多是不是?还有:
#include <stdio.h>
void port1_fpga() {
printf("调用接口port1_fpga\n");
}
void port2_fpga() {
printf("调用接口port2_fpga\n");
}
void port3_fpga() {
printf("调用接口port3_fpga\n");
}
void port4_fpga() {
printf("调用接口port4_fpga\n");
}
void port5_fpga() {
printf("调用接口port5_fpga\n");
}
void port6_fpga() {
printf("调用接口port6_fpga\n");
}
void port7_fpga() {
printf("调用接口port7_fpga\n");
}
void port8_fpga() {
printf("调用接口port8_fpga\n");
}
void port9_fpga() {
printf("调用接口port9_fpga\n");
}
void port10_fpga() {
printf("调用接口port10_fpga\n");
}
void port11_fpga() {
printf("调用接口port11_fpga\n");
}
void port12_fpga() {
printf("调用接口port12_fpga\n");
}
//算法设计
void port_work(int port) {
unsigned int addr;
if (port == 1) {
port1_fpga();
} else if (port == 2) {
port2_fpga();
} else if (port == 3) {
port3_fpga();
} else if (port == 4) {
port4_fpga();
} else if (port == 5) {
port5_fpga();
} else if (port == 6) {
port6_fpga();
} else if (port == 7) {
port7_fpga();
} else if (port == 8) {
port8_fpga();
} else if (port == 9) {
port9_fpga();
} else if (port == 10) {
port10_fpga();
} else if (port == 11) {
port11_fpga();
} else if (port == 12) {
port12_fpga();
} else {
printf("无效端口\n");
return;
}
// ...
}
int main(void) {
int port;
printf("请输入端口:");
scanf("%d", &port);
port_work(port);
return 0;
}
可变成:
#include <stdio.h>
void port1_fpga() {
printf("调用接口port1_fpga\n");
}
void port2_fpga() {
printf("调用接口port2_fpga\n");
}
void port3_fpga() {
printf("调用接口port3_fpga\n");
}
void port4_fpga() {
printf("调用接口port4_fpga\n");
}
void port5_fpga() {
printf("调用接口port5_fpga\n");
}
void port6_fpga() {
printf("调用接口port6_fpga\n");
}
void port7_fpga() {
printf("调用接口port7_fpga\n");
}
void port8_fpga() {
printf("调用接口port8_fpga\n");
}
void port9_fpga() {
printf("调用接口port9_fpga\n");
}
void port10_fpga() {
printf("调用接口port10_fpga\n");
}
void port11_fpga() {
printf("调用接口port11_fpga\n");
}
void port12_fpga() {
printf("调用接口port12_fpga\n");
}
typedef void (*port_fpga_t)();
port_fpga_t port_fpga_handlers[] = {
[1] = port1_fpga,
[2] = port2_fpga,
[3] = port3_fpga,
[4] = port4_fpga,
[5] = port5_fpga,
[6] = port6_fpga,
[7] = port7_fpga,
[8] = port8_fpga,
[9] = port9_fpga,
[10] = port10_fpga,
[11] = port11_fpga,
[12] = port12_fpga
};
//算法设计
void port_work(int port) {
port_fpga_t handler;
if (port < 1 || port > 12) {
printf("无效端口\n");
return;
}
handler = port_fpga_handlers[port];
handler();
// ...
}
int main(void) {
int port;
printf("请输入端口:");
scanf("%d", &port);
port_work(port);
return 0;
}
At The Last
C++中使用空格的建议
(1) 关键字之后要留空格。像const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析 关键字。像if、else if、for、while、switch 等关键字之后应留一个空格再跟左括号“(”,以突出关键 字;
(2) 函数名之后不要留空格,无论是在原型、定义还是在调用中;
(3)“(”、“[”向后紧跟,“]”、“,”、“;”、“)”向前紧跟,紧跟处不留空格;“,”之后要留空格,如 f(x, y, z);如果“;”不是一行的结束符,则后面也要留空格,如 for(initialization; condition; update);
(4) 预编译指令中#和保留字之间不要留空格;文件包含伪指令中文件名与两端的“<”,“>”或“"”、 “"”之间不留空格;
(5) 二元运算符如“=”、“+=”、“>=”、<=”、“+”、“*”、“%”、“&&”、“||”、“<<”、“^”等 的前后应加空格;
(6) 一元运算符如“!”、“~”、“++”、“--”、“-”、“&”(取地址运算符)、“*”(解引用运算符)等与 所有操作数之间不加空格;
(7) “.”、“->”、“.*”、“->*”、“::”这类运算符前后不加空格;“?”、“:”前后要加空格。
(空格部分参考https://www.cnblogs.com/ltang/archive/2010/10/25/1861136.html)

272

被折叠的 条评论
为什么被折叠?



