首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

做一个拒绝魔数的软件工程师

2013-09-07 
做一个拒绝魔数的程序员char s_name[10] {0}if (strlen(s_name) 10){do_something()}这里的数字10就

做一个拒绝魔数的程序员

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
自己一定要顶自己

热点排行