Function 函数中的return语句

Function 函数中的return语句,function,return,Function,Return,我想知道人们是如何处理函数中的返回语句的。我有一个分配一些内存的方法,但返回值为false;函数出错时的语句。此语句位于函数的中间位置,因此如果该函数失败,我的内存将泄漏。这不是唯一的回报。。。;我在这个函数中的语句。stackoverflow建议如何清理函数中包含几个返回语句的代码 if( true == OpenFtpConnection() ) { AfxMessageBox( _T( "Connection to internet and ftp server found" )

我想知道人们是如何处理函数中的返回语句的。我有一个分配一些内存的方法,但返回值为false;函数出错时的语句。此语句位于函数的中间位置,因此如果该函数失败,我的内存将泄漏。这不是唯一的回报。。。;我在这个函数中的语句。stackoverflow建议如何清理函数中包含几个返回语句的代码

if( true == OpenFtpConnection() )
{
    AfxMessageBox( _T( "Connection to internet and ftp server found" ) );

    // set the directory to where the xml file lives
    if( false == FtpSetCurrentDirectory( m_ftpHandle, _T(_FTP_XML_LOCATION) ) )
        return false;

    HINTERNET xmlHandle = NULL;
    WIN32_FIND_DATA fileData;
    SYSTEMTIME fileWriteTime;
    xmlHandle = FtpFindFirstFile( m_ftpHandle, _T("TPCFeed.xml"), &fileData, INTERNET_FLAG_RELOAD, 0 );
    if( NULL == xmlHandle )
        return false;
    else
    {
        // get the write time of the ftp file
        FileTimeToSystemTime( &fileData.ftLastWriteTime, &fileWriteTime );

        // get the write time of the local file
        HANDLE localFileHandle = NULL;
        localFileHandle = CreateFile( _T(_XML_FILENAME_PATH), FILE_READ_ATTRIBUTES,
                                 FILE_SHARE_READ, NULL, OPEN_EXISTING,
                                 NULL, NULL );
        if( INVALID_HANDLE_VALUE == localFileHandle )
        {
            AfxMessageBox( _T( "opening file failed, file not found" ) );
            return false;
        }
        else
        {
            CloseHandle( localFileHandle );
        }


        // close the FtpFindFirstFile() handle
        InternetCloseHandle( xmlHandle );
    }


    // download xml file to disk
    //if( false == FtpGetFile( m_ftpHandle, _T("TPCFeed.xml"), _T(_XML_FILENAME_PATH), FALSE, 
    //                       FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 0 ) )
    //  return false;

}
else
{
    AfxMessageBox( _T( "No Connection to internet or ftp server found" ) );
    return false;
}
if( true == CloseFtpConnection() )
    AfxMessageBox( _T( "Connection to internet closed" ) );
else
    AfxMessageBox( _T( "Connection to internet not closed" ) );

清晰是最重要的。很多时候,有多个返回点会使程序流不那么明显,从而更容易出现错误;但另一方面,有时早期回报相当明显;它们的意义和目的是明确的。所以我倾向于避免任何关于这方面的硬性规定


如果你真的发布了你想要清理的代码,你可能会获得更多的收益。

清晰是最重要的。很多时候,有多个返回点会使程序流不那么明显,从而更容易出现错误;但另一方面,有时早期回报相当明显;它们的意义和目的是明确的。所以我倾向于避免任何关于这方面的硬性规定


如果你真的发布了你想要清理的代码,你可能会获得更多的收益。

我们最近已经从“每个方法一次返回”风格改为“在有意义的地方返回”。这种转变的一部分是我们将方法中的行数限制在合理的范围内(比如50行)。通过限制函数大小,代码变得更具可读性,并且多个返回是自然的、可读的和高性能的。

我们最近从“每个方法一个返回”样式切换到了“有意义的返回”。这种转变的一部分是我们将方法中的行数限制在合理的范围内(比如50行)。通过限制函数大小,代码的可读性大大提高,并且多次返回是自然的、可读的和高性能的。

您还没有指定编程语言。假设它是C++:使用。这不仅处理多个返回,还处理方法执行期间引发的异常。如果使用Boost不是一个选项,那么创建您自己的智能指针类应该很容易:-)

您还没有指定您的编程语言。假设它是C++:使用。这不仅处理多个返回,还处理方法执行期间引发的异常。如果使用Boost不是一个选项,那么创建您自己的智能指针类应该很容易:-)

它与大小(50行)有关,与复杂性有关,特别是理解方法所需的时间。与大小(50行)有关,与复杂性有关,具体地说,理解该方法所需的时间。