В каком-то проекте C я видел этот код:
static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
(void)ud;
(void)osize;
/* some code not using `ud` or `osize` */
return ptr;
}
Служат ли два слепка на аннулирование какой-либо цели?
(void)
несколько иной эффект. Этот вопрос о CОтветы:
Это нужно, чтобы избежать предупреждений от компилятора, потому что некоторые параметры не используются.
источник
Причина наличия неиспользуемых параметров в прототипе обычно заключается в том, что функция должна соответствовать некоторому внешнему API - возможно, это библиотечная функция или указатель на эту функцию передается другой функции, которая ожидает этого соглашения о вызовах. Однако не все аргументы, используемые соглашением о вызовах, действительно необходимы в самой функции.
Причина упоминания имени параметра в теле - избежать предупреждений вроде
Это предупреждение можно подавить, используя фактический параметр в теле функции. Например, если у вас есть следующий оператор:
Это предупреждение теперь подавлено. Однако теперь GCC выдаст еще одно предупреждение:
Это предупреждение говорит о том, что оператор
ud;
, являясь синтаксически правильным C, вообще ни на что не влияет и, возможно, является ошибкой, в отличие от операторакоторый, возможно, должен был быть написан
abort();
вместо этого, чтобы он что-то делал.И вот тут-то и
(void)
пригодится приведение - оно однозначно и явно скажет компилятору, что оператор не должен иметь абсолютно никакого эффекта.источник