В тесте я отбрасываю что-либо из 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);
все равно выдает такое же предупреждение. Меня не волнует, если эта функция завершилась неудачей, так как худший сценарий - это немного дополнительного вывода. Любой другой способ я могу исправить это?
EDIT: Я знаю, что могу ввести лишнюю ненужную переменную. Я действительно хотел бы знать, почему кастинг в пустоту не работает.
UPDATE: Я решил пойти с этим:
FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }
После более детального изучения документации freopen
, я вижу, что если сбой /dev/null
не удался, stderr
все равно будет уничтожен. Это решает эту проблему.