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

标签 c++ optimization code-complexity

我有一个问题。我需要重构我的一部分代码以降低复杂性。我有多个类似的“if”结构,它们在每次随机实用程序 API 调用后重复,我需要根据这些结构回滚已完成的事务,否则继续。我只是想知道替换“if”结构是否会帮助我降低复杂性。我知道宏在代码中扩展,这就是为什么我不确定这种方法是否对我有帮助。我在重构代码方面相当陌生。如果对重构有想法和知识的人可以给我一些建议,那将非常有帮助。这就像替换下面的代码

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++ 引起的。以宏的形式添加更多 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();

关于c++ - 用宏替换重复的 "if" block 是否会降低 C++ 中的代码复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30119962/

相关文章:

javascript - 如何降低此开关盒的复杂性?

algorithm - 此循环的大 O 复杂度

algorithm - 算法的复杂性,当while循环发生变化时

c++ - 多线程和内存

c++ - 在 wxTextCtrl 中设置插入点的问题

c++ - 如何并行嵌套循环

python - 在Python中检测两个时间戳何时产生相同本地时间的最快方法是什么?

C++\Win32 以低优先级模式运行应用程序/线程?

c++ - 使用多线程优化执行时间(简单示例)

regex - 有没有一种方法可以优化我的 Powershell 函数以从大文件中删除模式匹配?