В тесте я отбрасываю что-либо из stderr
, так как оно загромождает вывод теста.Я использую следующий код:
freopen("/dev/null", "w", stderr);
При компиляции с -Wall -Werror
я получаю ошибку
error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
, которая ожидается.Однако обычное решение приведения к void
, похоже, не работает.Таким образом, изменение кода на
(void) freopen("/dev/null", "w", stderr);
по-прежнему выдает то же предупреждение.Мне все равно, если эта функция не работает, так как в худшем случае это дополнительный вывод.Любым другим способом, которым я могу это исправить?
РЕДАКТИРОВАТЬ: Я знаю, что мог бы ввести дополнительную ненужную переменную.Я действительно хотел бы знать, почему приведение к void не работает.
ОБНОВЛЕНИЕ: Я решил пойти с этим:
FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }
После прочтения freopen
Документация более тщательно, я вижу, что если открытие /dev/null
не удастся, stderr
все равно будет уничтожено.Это решает эту проблему.