2

任何人都可以评论以下功能的观点,这似乎不是很多:

// Returns stored values
int getDetails(const int param1[],
               int* param2,
               int* param3,
               int* param4)
{
    (void)param1;
    (void)param2;
    (void)param3;
    (void)param4;
    return 0;
}

注释实际上与代码一起存在。我想它一定是某种奇怪的存根,但它被调用了,我绞尽脑汁想想象我错过了什么。

到目前为止,我最好的预感是该函数已被弃用但未删除,这(void)param是为了避免编译器对未使用的变量发出警告。

4

5 回答 5

5

像这样的语句(void)param1;通常用于抑制有关未使用的函数参数的警告。(顺便说一句,在 C++ 中,您还可以注释掉或删除参数名称。)

您是正确的,该功能什么都不做。如果其他代码没有创建指向它的指针,您可以安全地删除它。

于 2013-04-10T09:07:43.077 回答
4

这是一个空函数。强制转换以void抑制有关未使用参数的警告。

当必须无条件调用函数或必须提供有效的函数指针时,通常会使用此类函数,但实际上与函数无关。

我的编译器的代码生成器中有一些这样的函数。实际上有两个代码生成器,一个用于 x86,另一个用于 MIPS。我编译和链接一个或另一个,从不同时两者。

代码生成器内部不同,但具有相同的外部 API。因此,特定于一个 CPU 的某些功能有一些工作要做,而另一个 CPU 的相同功能则无关紧要。从逻辑上讲,其中一些是空的,因为无事可做。

于 2013-04-10T09:12:59.627 回答
2

我的猜测(意见 - 对不起!)它可能是你所说的存根。如果您有一个函数需要一个或多个函数指针来实现某事,并且它不允许 NULL(不要为此烦恼),那么您必须提供一些东西供它调用。

演员表可能是为了避免“未使用的参数”警告。

于 2013-04-10T09:11:16.150 回答
1

你是对的,这没有意义。

它所做的只是通过评估参数并将结果转换为 来明确忽略参数(void),然后返回 0。

返回值是否在调用上下文中使用?最好的方法当然是删除调用并在使用返回值时将其替换为 0,然后测试程序。

于 2013-04-10T09:07:10.567 回答
1

当您不使用传递给它的参数时,一些编译器会显示错误/警告,以避免在您的代码中提及它。如果函数没有在任何地方调用或没有分配给任何函数指针,您可以删除它,因为它没有做任何特定的事情

于 2013-04-10T09:12:07.567 回答