Преобразование в void не устраняет ошибку warn_unused_result

В тесте я отбрасываю что-нибудь из stderr , так как он загромождает выходные данные тестового примера. Я использую следующий код:

freopen("/dev/null", "w", stderr);

При компиляции с -Wall -Werror , Я получаю ошибку

error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result

, которая ожидается. Однако обычное решение отливки в пустоту , похоже, не работает. То есть, изменение кода на

(void) freopen("/dev/null", "w", stderr);

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

РЕДАКТИРОВАТЬ: Я знаю, что мог бы ввести дополнительную ненужную переменную. Я действительно хотел бы знать, почему приведение к пустоте не работает.

ОБНОВЛЕНИЕ: Я знаю, что могу ввести дополнительную ненужную переменную. Я действительно хотел бы знать, почему приведение к пустоте не работает.

ОБНОВЛЕНИЕ: Я знаю, что могу ввести дополнительную ненужную переменную. Я действительно хотел бы знать, почему приведение к пустоте не работает.

ОБНОВЛЕНИЕ: Я решил пойти с этим:

FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }

После более внимательного прочтения документации freopen я вижу, что если открытие / dev / null завершится неудачно, stderr будет по-прежнему быть уничтоженным. Это решает эту проблему.

12
задан Michael Mior 1 September 2010 в 14:41
поделиться