了解带有硬编码值作为参数的NiFpga_MergeStatus()函数

时间:2019-06-21 23:44:17

标签: c++

我正在学习别人的代码(该代码有效,并且当前正在硬件应用程序中使用)。给定的代码是在Qt中实现的,因为我们需要生成一个应用程序,并创建一个应用程序,该应用程序允许用户使用gui设置某些参数,而代码则负责通过NI PXI将该命令传输至FPGA等。

在理解这段代码的过程中,我发现了以下代码中所示的对NiFpga_MergeStatus()的函数调用。作为第一个参数传递的参数已经过硬编码并设置为NiFpga_Status_Success(如果遵循路径,则是static const NiFpga_Status类型,其值设置为0

在查看NiFpga_MergeStatus()函数实现时,我相信使用此值进行硬编码,我们将永远不会到达第二个if语句,而返回值将是Invalid Parameter值。

为什么有人要实现这样的代码?尤其是自从发送第二个参数以来,似乎已经对此进行了一些考虑。在分析状态参数作为参数传递之前对其进行编码时,我总是会执行第一个if语句来分析吗?让我知道是否需要提供更多详细信息。头文件由Ni(NiFpga.h)提供。 谢谢

该功能用途的NiFpga说明:

 * Conditionally sets the status to a new value. The previous status is
 * preserved unless the new status is more of an error, which means that
 * warnings and errors overwrite successes, and errors overwrite warnings. New
 * errors do not overwrite older errors, and new warnings do not overwrite
 * older warnings.
 *
 * @param status status to conditionally set
 * @param newStatus new status value that may be set
 * @return the resulting status

static NiFpga_Inline NiFpga_Status NiFpga_MergeStatus(                                           
    NiFpga_Status* const status,                                               
    const NiFpga_Status  newStatus)
{
    if (!status) //
        return NiFpga_Status_InvalidParameter;
    if(NiFpga_IsNotError(*status)
    &&  (*status == NiFpga_Status_Success || NiFpga_IsError(newStatus)))
        *status = newStatus;
    return *status;
}

1 个答案:

答案 0 :(得分:0)

状态是指针参数。在第一个if语句(if (!status))中,它仅检查指针是否实际上指向内存中的某物。因此,在您的情况下,它始终评估为false,并且永远不会调用return NiFpga_Status_InvalidParameter;

但是,第二个if语句正在执行将状态(*status)与NiFpga_Status_Success的实际值(注意星号*)进行比较的工作。