该宏的定义如下:
#ifndef UNUSED_PARAM
#define UNUSED_PARAM(v) (void)(v)
#endif
假如一个有返回值的函数
如调用时是没有使用它的返回值,编译器会给出一个警告
如果用void强制转换一下,则明确告诉编译器不使用返回值
也就是为了消除警告
也即是防止未使用的变量在编译时产生warning
知乎上有个比较深入的解释,记录如下:
摘抄
C 语言语法分析时的执行性语句大致分为两类:
求值 (evaluation)
控制流 (control flow)
标识符 x 作为一条单独语句时,是一条求值表达式语句,表达式的值就是 x 的值。(void) (x) 是一条无作用的使用 x 的表达式语句(会被优化器删除),目的是为了让编译器(开启高级别警告时)抑制诸如“定义的局部变量/函数形参 x 未使用”的警告,或者抑制 Lint 工具类似的静态检查警告。
如果是 Windows 程序员,看一下 Windows.h 里的 UNREFERENCED_PARAMETER(x) 和 DBG_UNREFERENCED_LOCAL_VARIABLE(x) 宏,是相似的功能。
作者:breaker
链接:https://www.zhihu.com/question/310564978/answer/584245054
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
[参考资料]