Я читаю некоторый код библиотеки, которую я использую, и обнаружил, что в функции это использовалось:
void someFunction(Foo& a, int index, int partId)
{
(void) partId;
(void) index;
// more code
}
Кто-нибудь знает почему? Благодарю.
Чтобы избежать предупреждения / ошибки компилятора, указывающего, что переменная не использовалась в теле функции. Это выбор стиля, другой способ добиться того же эффекта — оставить переменную без имени:
void someFunction(Foo& a, int /*index*/, int /*partId*/)
Обычно это делается, когда параметры не используются в функции, а компилятор выдает предупреждение о неиспользуемых параметрах. При добавлении кейса компилятор посчитает, что они были использованы, и не выдаст разметку.
Вы можете сделать то же самое, просто удалив имя параметра из функции:
void someFunction(Foo& a, int, int)
{
}
Index
а также partId
не используются внутри функции.
Компилятор C / C ++ обычно выдает предупреждение о неиспользуемых параметрах.
(void) parameter;
оператор не будет генерировать никакого кода, но сообщит компилятору, что вы используете параметр, чтобы избежать указанного предупреждения.
Это также вежливый способ сообщить другому программисту, что параметры по какой-то причине не используются.
(обычно соответствует более общему интерфейсу или поддерживает устаревшие параметры из предыдущей версии того же интерфейса).
И последнее, но не менее важное, как отметил Джерри Коффин, это работает как в C, так и в C ++, тогда как альтернативное решение использования неназванных параметров работает только в C ++.
Что он делает, так это использование partId
а также index
, фактически не используя их. Другими словами, это вводит компилятор в заблуждение, что аргументы функции фактически используются, тогда как в действительности их не использует код.
Зачем это делать? Потому что они установили флаг в компиляторе, чтобы генерировать предупреждение, когда аргумент функции не используется в ее теле.
Обратите внимание, что в C ++ можно просто удалить имя аргумента из функции. Если вы видите это в C, попробуйте отключить предупреждение для неиспользуемых аргументов функции, так как вы не можете опустить имена аргументов.