用宏替换重复"if"块是否会降低C++中的代码复杂性?

Does replacing repititve "if" block with a macro reduce code complexity in C++?

本文关键字:C++ 复杂性 代码 是否 替换 if      更新时间:2023-10-16

我有一个问题。我需要重构代码的一部分以降低复杂性。我有多个类似的" IF"构造,在每个随机实用程序API调用后都重复出现,我需要回滚完成的交易或继续进行。我只是想知道替换"如果"结构是否会帮助我降低复杂性。我知道宏在代码中扩展,这就是为什么我不确定这种方法是否对我有帮助。我在重构代码方面很新。如果有人对重构有想法和知识可以向我提出某种方式,那真的很有帮助。就像更换下面的代码

retCode = certman_set_cmp_server_psk_refnum(ctx,(char*)domain.c_str(),NULL,NULL,0);
if (retCode != 0)
{
    if(startedTxn == true)
    {
        status = ldapInterface.rollback_transaction();
        if(0 != status)
        {
            clifwk_trace(session, "Rollback failed in internal transaction", CLIFWK_DEBUG);
            syslog(LOG_ERR, "Rollback failed in internal transaction");
            return CERTMAN_COMMIT_TRANSACTION_FAILED;
        }
        DEL_IF_NOT_NULL (ctx);
    }
    return retCode;
}

使用retCode = certman_set_cmp_server_ip_port(ctx,(char*)domain.c_str(),NULL,0); CHECK_ROLLBACK_TRANSACTION(session,ctx,ldapInterface,retCode,startedTxn); RETURN_IF_ERROR(retCode);

这种方法对我有助于减少复杂性吗?

您的复杂性问题似乎是由C 太少引起的。以宏的形式添加更多 c只会变得更糟。

例如, DEL_IF_NOT_NULL (ctx);不是一个,而是两个三个标志。我认为这是if (ctx) delete ctx构造。第一个危险信号是if语句,该语句无需做任何事情。第二个危险信号是您使用原始指针,而不是依靠智能指针。这也将修复第三个危险信号,这是在0!=status错误情况下未能清理的。

使用retcode而不是异常引起类似的复杂性。

这是代码应该如此简单的:

std::unique_ptr<T> ctx = foo();
auto transaction = ldapInterface.get_transaction(); // will rollback unless committed
certman::set_cmp_server_psk_refnum(*ctx,domain,nullptr,nullptr,0);
transaction.commit();