Зачем бросить неиспользуемое значение параметра функции в пустоту?

StackOverflow https://stackoverflow.com/questions/4647665

  •  09-10-2019
  •  | 
  •  

Вопрос

В некоторых 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;
}

Делайте два отряда в пустоту служить какие-либо цели?

Это было полезно?

Решение

Следует избегать предупреждений от компилятора, потому что некоторые параметры не используются.

Другие советы

Причина для неиспользованный Параметры в прототипе обычно связаны с тем, что функция должна соответствовать некоторому внешнему API - возможно, это функция библиотеки или указатель на эту функцию передается другому функции, которая ожидает этой конвенции о вызове. Однако не все аргументы, используемые Конвенцией о вызове, фактически необходимы в самой функции.

Причина для упоминание Название параметра в теле состоит в том, чтобы избежать предупреждений, таких как

unused.c: In function ‘l_alloc’:
unused.c:3:22: warning: unused parameter ‘ud’ [-Wunused-parameter]
 void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
                      ^~

Это предупреждение Может быть подавлен с использованием фактического параметра в корпусе функции. Например, если у вас есть следующее утверждение:

ud;

Это предупреждение теперь подавляется. Однако сейчас GCC будет производить Другой предупреждение:

unused.c:5:5: warning: statement with no effect [-Wunused-value]
     ud;
     ^~

Этот Предупреждение говорит, что заявление ud;, будучи синтаксически действительным C, вообще ничего не влияет, и, возможно, ошибка, не в отличие от утверждения

abort;

что, возможно, должно быть написано как abort(); вместо этого для этого что-то сделать.

И вот где (void) CAST приходит - он будет однозначно рассказать компилятору однозначно и явно, что утверждение должно быть абсолютно никакого эффекта вообще.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top