做一个拒绝魔数的程序员
char s_name[10] = {0};
if (strlen(s_name) < 10)
{
do_something();
}
这里的数字10就是所谓的魔数。
所谓的魔数就是你代码中突然出现的一个数字常量,而当你第一眼看到这个常量时
你可能并不知道其代表的函数,甚至有时可能需要花很长时间才能搞清楚。
代码中的魔数会很大程度上影响到程序的可读性,如果你只看到if(strlen(s_name) < 10)时
你会一下子知道这个10的用意吗?
如果有一天你发现s_name用10个byte不够用的时候,比如需要20个byte才够存储s_name的时候,
你会修改成char s_name[20] = {0};
如果跟s_name相关的地方有多处更有甚者是放在多个不同的文件中时,你敢保证能一次将
所有相关的地方都修改到吗?
如果你敢保证,那这样会不会很费力?
如果你不敢保证,那会给你的程序带来风险。
因为这些原因,所以我们应该要拒绝这些魔数,那应该要怎样做?
我们可以通过定义有意义的macro来解决这个问题,比如:
#define MAX_NAME_LEN (10)
char s_name[MAX_NAME_LEN] = {0};
if (strlen(s_name) < MAX_NAME_LEN)
{
do_something();
}
这样就算将来软件需要升级,那我们也可以很容易的修改成:
#define MAX_NAME_LEN (20)
这样是不是很好?
- 1楼boyxulin1986昨天 22:18
- 自己一定要顶自己