Trong thử nghiệm, tôi loại bỏ mọi thứ từ stderr
vì nó cắt đầu ra của vỏ kiểm tra. Tôi đang sử dụng đoạn mã sau:Truyền để hủy không xóa lỗi warn_unused_result
freopen("/dev/null", "w", stderr);
Khi biên dịch với -Wall -Werror
, tôi nhận được lỗi
error: ignoring return value of ‘freopen’, declared with attribute warn_unused_result
được mong đợi. Tuy nhiên, các giải pháp thông thường của đúc để void
dường như không hoạt động. Tức là, thay đổi mã thành
vẫn tạo ra cảnh báo tương tự. Tôi không quan tâm nếu chức năng này thất bại vì kịch bản trường hợp xấu nhất là một chút đầu ra thêm. Bất kỳ cách nào khác tôi có thể sửa lỗi này?
EDIT: Tôi biết tôi có thể giới thiệu một biến không cần thiết bổ sung. Tôi thực sự muốn biết tại sao đúc để void không hoạt động.
UPDATE: tôi quyết định đi với điều này:
FILE *null = fopen("/dev/null", "w");
if (null) { fclose(stderr); stderr = null; }
Sau khi đọc các tài liệu hướng dẫn freopen
cẩn thận hơn, tôi thấy rằng nếu mở /dev/null
thất bại, stderr
sẽ vẫn bị phá hủy. Điều này giải quyết vấn đề đó.
'null' là một tên xấu cho một biến C . –
Điểm tốt. Tôi không biết tôi nghĩ đó là một ý tưởng hay. –