Неиспользуемые выходные параметры - PullRequest
1 голос
/ 21 апреля 2020

Когда функция C возвращает значения по ссылке, требуется ли передавать действительный указатель на функцию для выходных значений, которые мне не нужны? Например, возьмите функцию: max_f32(float32_t *x, float32_t *val, size_t *i);, где val и i - это возвращаемые значения, но меня интересует только результат val.

Требуется ли передать действительный указатель на параметр * 1007? * или я могу передать какой-то фиктивный указатель или NULL? Есть ли у C механизм для обработки подобных вещей? Python, например, может вернуться к _ в этой ситуации.

Я понимаю, что не очень обременительно выделять переменную для i и что компилятор оптимизирует ее. Но я хотел бы лучше понять эту часть языка C.

Ответы [ 2 ]

4 голосов
/ 21 апреля 2020

Это зависит от создателя функции; Они могут разрешить NULL для неиспользуемых указателей или могут требовать , чтобы был передан действительный указатель.

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

2 голосов
/ 21 апреля 2020

Вы должны вызвать функцию с 3 параметрами, потому что функция ожидает 3 параметра. Там нет механизма уровня языка, чтобы опустить i. Все дело в том, как функция была задокументирована и реализована для работы с i. Передавать NULL.

может быть, а может и не быть. Допустим, вы должны передать действительный i, если явно не задокументировано, что передача NULL в порядке.

Рассмотрим следующие два реализации, первая требует действительного i, вторая делает i необязательным благодаря использованию NULL.

void max_f32_required(float32_t *x, float32_t *val, size_t *i) {
    *val = *x;
    *i = 42;
}

// Expect to find it documented that i is ignored when NULL.
void max_f32_optional(float32_t *x, float32_t *val, size_t *i) {
    *val = *x;
    if (i != NULL) *i = 42; // Omitted if i is NULL.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...