使用(显然)空Cfunction

任何人都可以对以下function的观点发表评论,这看起来并不是很多:

// 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是为了避免编译器警告有关未使用的变量。

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

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

这是一个空function。 转换为void禁止有关未使用参数的警告。

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

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

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

我的猜测(意见 – 对不起!)就像你说的那样它可能是一个存根。 如果你有一个函数需要一个或多个函数指针来实现某些东西并且它不允许NULL(不要打扰它)那么你必须提供一些东西来调用它。

强制转换可能是为了避免“未使用的参数”警告。

你是对的,没有意义。

它所做的只是通过计算它们并将结果转换为(void)并返回0来显式忽略参数。

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

当您不使用传递给它的参数时,某些编译器会显示错误/警告,以避免在您的代码中提及它。 如果函数未调用任何位置或未分配给任何函数指针,则可以将其删除,因为它没有执行任何特定操作