标签:style blog http color 使用 os
等级:【要求】
说明:每个函数的代码行数控制应该控制在80行以内。如果超过这个限制函数内部逻辑一般可以拆分。如果试图超过这个标准,请列出理由。但理由不包含如下:
例子:
for ( std::vector<ATL::CString, COneClass>::iterator it = m_VecObjects.begin(); it != m_VecObjects.end(); it++ )
这一行一共113列。
我们可以这么修改:
typedef std::vector<ATL::CString, COneClass>::iterator VecCStClsIter; for ( VecCStClsIter it = m_VecObjects.begin(); it != m_VecObjects.end(); it++ )
或者使用boost/C++11中的auto:
for ( auto it = m_VecObjects.begin(); it != m_VecObjects.end(); it++ )
等级:【要求】
说明:如果逻辑中重复代码行数超过30行,应该考虑将该逻辑提炼成一个函数。这样既可以增强代码可读性,还可以降低未来代码维护的代价。
说明:在“1.6宏”规则中,我们已经规定宏要使用全大写方式定义。所以为了区分宏和函数,函数名不可以使用全大写。
说明:如果给不需要返回值的函数设计返回值,将为使用该函数的人带来困惑。
说明:对于有返回值的函数,如果逻辑进入一个没有返回值的分支,将导致未知错误。
说明:如果不使用引用传递,则在函数调用时产生内存拷贝行为。大幅降低函数执行效率。
说明:避免函数中对入参修改导致逻辑出错。
说明:这样安排一般复合理解的需要。实际上很多Windows API也是基于这样的规则设计的。
等级:【推荐】
说明:这样将在声明定义分离的模式下,阅读者可以快速知道该函数存在默认参数的情况。
void print( int nValue = 1 ); ....... void print( int nValue /*= 1*/ ) { printf("%d", nValue); }
等级:【要求】
说明:系统中很多需要64位变量的API存在于vista以上的系统中。如果我们代码中使用该类函数,将导致在XP系统上运行出错(当然可以动态加载系统dll并寻址以解决该问题)。
说明:以前一批老的C函数存在不安全隐患。为了提高程序的健壮性,需使用安全版函数替代。
比较常见的非安全函数:
wcsncpy | strcpy | strncpy | memcpy |
wmemcpy | sprintf | wprintf | vsnprintf |
编译器报:
warning C4996: 'XXXX': This function or variable may be unsafe. Consider using wcsncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
使用这些不安全函数存在以下危害:
简单的例子:
#define UNSAFE int _tmain(int argc, _TCHAR* argv[]) { int m = -1; char buffer[8] = {0}; int n = -1; std::string str = "012345678901234567890123456789"; #ifdef UNSAFE memcpy(buffer, str.c_str(), str.length()); #else memcpy_s(buffer, _countof(buffer), str.c_str(), str.length()); #endif printf("%d %d\n", m, n); return 0; }在release无优化的情况下,该段会产生脏数据并崩溃。(n的值已经被改变)
等级:【必须】
说明:VS平台上一个被声明为inline的函数并不一定会被内嵌到代码中,而是和普通函数一样。因为VS会依据自己的规则判断是否需要做真实的“内联”。Windows客户端C/C++编程规范“建议”——函数,布布扣,bubuko.com
标签:style blog http color 使用 os
原文地址:http://blog.csdn.net/breaksoftware/article/details/37929885