避免条件分离
-以下代码不好
...
for(i = 0; i < 15; i++)
aiBuff[i] = 0;
要改成
...
for(i = 0; i < sizeof(aiBuff) / sizeof(aiBuff[0]); i++)
aiBuff[i] = 0;
这样是为了保证在aiBuff的长度被调整后,不会因为忘了调整for中的内容而出现错误。
-比如要为_stprintf准备字符串缓冲区(假设这里需要只显示输出整数,没有其他字符串混合)。设unsigned int类型,显示16进制格式
这样写不好:
TCHAR buff[60];//即使你认为60个字符“很大很大”
宁可像这样写:
TCHAR buff[sizeof(int) * 2 + 1];
如果要显示10进制就不太好办了。当前似乎只能用模板特化实现。为个求缓冲区长度,还要专门写个类,但为了实现整合,...也只有这样了...
private:
TBuffLenCounter(void);
};
template <>
class TBuffLenCounter<(_INTEGER_TYPE_)0>
{
protected:
enum nmRes { val = 0 };
private:
TBuffLenCounter(void);
};
template < bool _UNSIGNED_ >
class CIntChk
{
public:
enum nmRes { val = TBuffLenCounter< (_INTEGER_TYPE_)-1 >::val };
private:
CIntChk(void);
};
template <>
class CIntChk<false>
{
private:
CIntChk(void);
};
public:
enum nmRes { val = CIntChk< ((_INTEGER_TYPE_)-1 > 0) >::val }; // The _INTEGER_TYPE_ can't be signed integer type.
private:
TGetBufferLen(void);
};
使用:
TCHAR buffD[TGetBufferLen<unsigned int>::val + 1];