指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值

变量声明赋予初值,可以避免由于编程人员的疏忽导致的变量未初始化引用。
示例
 

1. SOCKET s = INVALID_SOCKET;
2. unsigned char *msg = NULL;
3. BOOL success = FALSE;
4. int fd = -1;

代码示例:

#include
void testInit(const bool fCondition)
{
    char *pMsg;
    if(fCondition)
    {
        pMsg = (char *)malloc(10);
        //...
    }
    if(pMsg != nullptr)
    {
        free(pMsg);
    }
}
int main()
{
    testInit(false);
    return 0;
}

编译运行:

                                                              图2

如上图2程序报无效指针,直接崩了。

通过gdb查看崩溃的core文件,原因:因为传入的参数是fCondition,pMsg没有初始化没有指定为nullptr,在12行释放了无效指针。指针变量、表示资源描述符的变量、BOOL变量声明必须赋予初值_第1张图片

 

 修改程序验证:

#include
void testInit(const bool fCondition)
{
    char *pMsg = nullptr;
    if(fCondition)
    {
        pMsg = (char *)malloc(10);
        //...
    }
    if(pMsg != nullptr)
    {
        free(pMsg);
    }
    std::cout<<"testInit success"<

编译运行ok

 对全局变量,静态变量,在编译阶段自动初始化为0或者等于NULL,不用在定义时强制初始化。 因为系统会自动初始化为0或者NULL;

测试代码

#include
int g_iNoInit;
char* g_pNoInit;
bool g_fNoInit;

int main()
{   
    static int sINoInit;
    std::cout<<"g_iNoInit = "<

 

你可能感兴趣的:(编程规范,c++,c,c++,开发语言)