我正在学习别人的代码(该代码有效,并且当前正在硬件应用程序中使用)。给定的代码是在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;
}
答案 0 :(得分:0)
状态是指针参数。在第一个if语句(if (!status)
)中,它仅检查指针是否实际上指向内存中的某物。因此,在您的情况下,它始终评估为false,并且永远不会调用return NiFpga_Status_InvalidParameter;
。
但是,第二个if语句正在执行将状态(*status
)与NiFpga_Status_Success
的实际值(注意星号*)进行比较的工作。