В тесте я отбрасываю что-нибудь из 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
будет по-прежнему быть уничтоженным. Это решает эту проблему.