我更喜欢使用宏,因为它不仅告诉编译器我的意图,还告诉代码的其他维护者,并且以后可以搜索它。
不熟悉代码的人(或者 6 个月后的我)很容易错过注释掉参数名称的方法。
然而,这是一个风格问题,就生成的代码、性能或健壮性而言,这两种方法都不是“更好”或更优化的。对我来说,决定因素是通过标准化系统将我的意图告知其他人。省略参数名称并添加注释同样有效:
void CFooBar::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pNMHDR);
或者:
void CFooBar::OnLvnItemchanged(NMHDR* /* pNMHDR */, LRESULT *pResult)
{
// Not using: pNMHDR
我想说最糟糕的解决方案是抑制警告信息;这将影响您的整个文件或项目,并且您将失去可能错过某些内容的知识。至少通过添加宏或注释掉参数名称,您已经告诉其他人您已经有意识地决定不使用此参数并且这不是一个错误。
WinNT.h 中的 Windows SDKUNREFERENCED_PARAMETER()
与DBG_UNREFERENCED_PARAMETER()
和一起定义DBG_UNREFERENCED_LOCAL_VARIABLE()
。它们都评估相同的东西,但不同之处在于 DBG_UNREFERENCED_PARAMETER() 在您开始时使用,并希望在代码更完整时使用参数。如果您确定永远不会使用该参数,请使用 UNREFERENCED_PARAMETER() 版本。
Microsoft 基础类 (MFC) 具有类似的约定,具有较短的UNUSED()
和UNUSED_ALWAYS()
宏。
选择一种风格并坚持下去。这样以后,您可以DBG_UNREFERENCED_PARAMETER
在代码中搜索“”并找到您希望使用参数但没有使用的任何实例。通过采用一致的风格并习惯性地使用它,您以后会更容易为他人和自己。