Я предпочитаю использовать макрос, так как он сообщает не только компилятору о моих намерениях, но и другим сопровождающим кода, и он доступен для поиска позже.
Метод комментирования имени аргумента может быть легко пропущен людьми, незнакомыми с кодом (или мной 6 месяцев спустя).
Однако это проблема стиля, ни один из методов не является «лучшим» или более оптимальным с точки зрения генерируемого кода, производительности или надежности. Для меня решающим фактором является информирование других о моем намерении через стандартизированную систему. Пропуск имени параметра и добавление комментария будет работать одинаково хорошо:
void CFooBar::OnLvnItemchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
UNREFERENCED_PARAMETER(pNMHDR);
В качестве альтернативы:
void CFooBar::OnLvnItemchanged(NMHDR* /* pNMHDR */, LRESULT *pResult)
{
// Not using: pNMHDR
Я бы сказал, что худшим решением является подавление предупреждающего сообщения; это повлияет на весь ваш файл или проект, и вы потеряете знание о том, что, возможно, вы что-то упустили. По крайней мере, добавив макрос или закомментировав имя аргумента, вы сказали другим, что приняли сознательное решение не использовать этот аргумент и что это не ошибка.
Windows SDK в WinNT.h определяет UNREFERENCED_PARAMETER()
вместе с DBG_UNREFERENCED_PARAMETER()
и DBG_UNREFERENCED_LOCAL_VARIABLE()
. Все они оценивают одно и то же, но разница в том, что DBG_UNREFERENCED_PARAMETER () используется, когда вы начинаете, и ожидаете использовать параметр, когда код будет более полным. Если вы уверены, что никогда не будете использовать этот параметр, используйте версию UNREFERENCED_PARAMETER ().
У базовых классов Microsoft (MFC) есть аналогичное соглашение с более короткими макросами UNUSED()
и UNUSED_ALWAYS()
.
Выберите стиль и придерживайтесь его. Таким образом, позже вы можете искать «DBG_UNREFERENCED_PARAMETER
» в своем коде и находить любые случаи, когда вы ожидали использовать аргумент, но не сделали этого. Приняв непротиворечивый стиль и привычно используя его, вы потом упростите его для других и для себя.