重要程度划分 S A B C
1.金钱使用无符号数,导致有可能在减钱的时候而加了钱,无符号没有负数(S)
(虽然AddBindTickets函数传的金币数是int类型,导致DWORD(unsigned int)明哥的原话:我怀疑有没有测试过,刷金币和物品是最严重的错误,可以直接被公司辞退,把一个负数赋值给DWORD类型的变量,数值可能变得好大)WORD明哥的原话:我怀疑有没有测试过,刷金币和物品是最严重的错误,可以直接被公司辞退,把一个负数赋值给DWORD类型的变量,数值可能变得好大)
2.一些函数有已经封装好的可以直接调用。如HFSetHtmlPage (A)
3.NerveHandle本来是经脉的,不是活动,却放在了Huodong文件夹里 (C)
4.客户端能计算的一些函数不要去请求服务器。如服务器的GetStuffAndMoneyCostBindTicketsAndTickets
在不计算金钱返还和和折扣的情况下用客户端的GetAutoBuyCostInfo来代替 (A)
5.读取配置文件时的字符数组,在每次读取数据前都要memset(szBuffer, 0, sizeof(szBuffer)).否则可能保留之前
的数据尤其是之前的数据比当前的数据长的情况下 (S)
6.缩进要对齐 (C)
7.gGlobalClient->getNetConnection() 要先判断NULL,同理gZoneServiceProvider->GetChatServer() 也要判断NULL,
所以最好的办法是只要是指针,全部判断是否为NULL再调用,这样就不用太详细的考虑这个问题。 (B)
8.C++里两者取较大的那一个数可以调用 max 不用使用三元运算符。 (C)
9.客户端请求数据库可以用C++的消息,也可以直接用Lua函数TaskItemClick。更灵活,且便于修改。 (B)
(明哥的原话:应用逻辑代码最好都提取到lua中实现,把底层的存储、高要求的计算和lua中实现不方便的逻辑就可以放C++中实现
)
10.如果已经判断了长度直接使用强制转换就行了,不用使用缓存对象。而且要先判断.good() 再使用。而不是先使用再判断。 (B)
iBuffer ibuf(pszMsg, nLen);
SMsg msg;
iBuffer >> msg;
if (!iBuffer.good())
11.没有实际操作的不要使用Info_ChatWindow 选项。这个我知道的呀。 (C)
12.DWORD 类型前缀才用dw, int类型要用n。 (A)这个是拷贝没有修改的锅。
13.sprintf_s换成sprintf 使用公司封装的更安全的字符串整合函数。 (C)
14.重要的判断放在前面,不满足就返回了,不要处理了一堆逻辑之后,最后又因为条件不满足而返回。 (B)
15.不是很重要的if条件语句,直接判断 ~= NULL来执行,而不用再 == NULL return了。这个就是个编码风格问题 (C)
16.函数的返回值作为判断条件, 比如 返回-1,就用-1 来判断,而不要用 < 0.来判断。
17.函数返回类型要一致,即使是Lua函数,不可以 有的分支 return true, 0 有的分支 return false, "" (B)
18.复制 不应该全部拷贝过来 应该一行一行的拷贝过来,检查完毕,才可以。 (S)
19.能够提取出来作为变量的,不要反复调用函数获取。 比如客户端的GetHero() (C)
综上所述:
1.欲速则不达,越想快,如果犯了错误 回头返工 其实反而更慢。
2.Review代码应该一行一行的看仔细了,尤其是在对金币,元宝等进行操作时,更是要想清楚每一步,每个函数传递的参数的实际意义。可以把具体的正负值写在那里。
3.复制代码可以,可要保证每一行代码都有意义。且没有错误。
4.主要是精神问题,前两周都没休息好,精神太差了,用那么差的精神去写代码怎么可能会不是漏洞百出?所以最最重要的
是好好休息,养好精神和体力,为每一天高校,精准的工作做好准备。
预防数值转换的错误:
1.对一个DWORD类型的变量赋一个负数值时编译器都会报警,所以要看新编译的警告信息里有没有刚才修改的文件。
2.
1.金钱使用无符号数,导致有可能在减钱的时候而加了钱,无符号没有负数(S)
(虽然AddBindTickets函数传的金币数是int类型,导致DWORD(unsigned int)明哥的原话:我怀疑有没有测试过,刷金币和物品是最严重的错误,可以直接被公司辞退,把一个负数赋值给DWORD类型的变量,数值可能变得好大)WORD明哥的原话:我怀疑有没有测试过,刷金币和物品是最严重的错误,可以直接被公司辞退,把一个负数赋值给DWORD类型的变量,数值可能变得好大)
2.一些函数有已经封装好的可以直接调用。如HFSetHtmlPage (A)
3.NerveHandle本来是经脉的,不是活动,却放在了Huodong文件夹里 (C)
4.客户端能计算的一些函数不要去请求服务器。如服务器的GetStuffAndMoneyCostBindTicketsAndTickets
在不计算金钱返还和和折扣的情况下用客户端的GetAutoBuyCostInfo来代替 (A)
5.读取配置文件时的字符数组,在每次读取数据前都要memset(szBuffer, 0, sizeof(szBuffer)).否则可能保留之前
的数据尤其是之前的数据比当前的数据长的情况下 (S)
6.缩进要对齐 (C)
7.gGlobalClient->getNetConnection() 要先判断NULL,同理gZoneServiceProvider->GetChatServer() 也要判断NULL,
所以最好的办法是只要是指针,全部判断是否为NULL再调用,这样就不用太详细的考虑这个问题。 (B)
8.C++里两者取较大的那一个数可以调用 max 不用使用三元运算符。 (C)
9.客户端请求数据库可以用C++的消息,也可以直接用Lua函数TaskItemClick。更灵活,且便于修改。 (B)
(明哥的原话:应用逻辑代码最好都提取到lua中实现,把底层的存储、高要求的计算和lua中实现不方便的逻辑就可以放C++中实现
)
10.如果已经判断了长度直接使用强制转换就行了,不用使用缓存对象。而且要先判断.good() 再使用。而不是先使用再判断。 (B)
iBuffer ibuf(pszMsg, nLen);
SMsg msg;
iBuffer >> msg;
if (!iBuffer.good())
11.没有实际操作的不要使用Info_ChatWindow 选项。这个我知道的呀。 (C)
12.DWORD 类型前缀才用dw, int类型要用n。 (A)这个是拷贝没有修改的锅。
13.sprintf_s换成sprintf 使用公司封装的更安全的字符串整合函数。 (C)
14.重要的判断放在前面,不满足就返回了,不要处理了一堆逻辑之后,最后又因为条件不满足而返回。 (B)
15.不是很重要的if条件语句,直接判断 ~= NULL来执行,而不用再 == NULL return了。这个就是个编码风格问题 (C)
16.函数的返回值作为判断条件, 比如 返回-1,就用-1 来判断,而不要用 < 0.来判断。
17.函数返回类型要一致,即使是Lua函数,不可以 有的分支 return true, 0 有的分支 return false, "" (B)
18.复制 不应该全部拷贝过来 应该一行一行的拷贝过来,检查完毕,才可以。 (S)
19.能够提取出来作为变量的,不要反复调用函数获取。 比如客户端的GetHero() (C)
综上所述:
1.欲速则不达,越想快,如果犯了错误 回头返工 其实反而更慢。
2.Review代码应该一行一行的看仔细了,尤其是在对金币,元宝等进行操作时,更是要想清楚每一步,每个函数传递的参数的实际意义。可以把具体的正负值写在那里。
3.复制代码可以,可要保证每一行代码都有意义。且没有错误。
4.主要是精神问题,前两周都没休息好,精神太差了,用那么差的精神去写代码怎么可能会不是漏洞百出?所以最最重要的
是好好休息,养好精神和体力,为每一天高校,精准的工作做好准备。
预防数值转换的错误:
1.对一个DWORD类型的变量赋一个负数值时编译器都会报警,所以要看新编译的警告信息里有没有刚才修改的文件。
2.