У меня есть программа связи с сокетом.Протокол заключается в том, что любая ошибка при записи является фатальной, поэтому соединение должно быть закрыто.Мой код ввода / вывода выглядит следующим образом:
auto const toWrite = buf.size() * sizeof(buf[0]);
auto nWritten = ::write(fd, buf.data, toWrite);
if (toWrite != nWritten)
{
closeTheSocket();
}
Этот код дает warning: comparison between signed and unsigned integer expressions
в булевом тесте.
Я понимаю зло больших / меньших сравнений со знаком и без знака, ноэто неизбежно здесь.Подпись для системного вызова ::write
:
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
Другими словами, моя переменная toWrite
должным образом не подписана, а возвращенный nWritten
подписан (-1 означает, чтоошибка).Мне все равно;все, кроме полной передачи, фатально для соединения.Кроме того, я не понимаю, как (in) тест на равенство между подписанным / неподписанным может быть опасным.
Я посмотрел здесь , здесь , здесь и здесь , но все вопросы касаются сравнений меньше, и все ответы "не делай этого".
Этот вопрос просит замолчать предупреждение, но кувалда "заставить замолчать все подписанные / неподписанные" сравнения нежелательна.
Как мне заставить замолчать только это предупреждение как можно менее навязчивым способом?