A>А чтобы, значит, таких ошибок не допускать, он предлагал форматирование.
A>A>if (!( errno == EAGAIN
A> || EWOULDBLOCK
A> || errno == EINTR
A> || errno == ENOSPC
A> || errno == ENOBUFS
A> || errno == ENOMEM)) {
A>
A>С моей точки зрения это глупость.
да нормальный это подход, ничего в нем глупого нет. Табличное форматирование хорошо помогает видеть нарушения структурности, если его использовать побольше
A>Код надо писать так, чтобы его нельзя было записать неправильно хоть в строчку, хоть столбиком, табличкой, крестиком, козликом и т.д. Соответственно, единственный правильный вариант это вот такой вот псевдокод:
A>A>if (!(errno is in (
A> EAGAIN,
A> EWOULDBLOCK,
A> EINTR,
A> ENOSPC,
A> ENOBUFS,
A> ENOMEM
A> ))
A>{
A>...
A>}
A>
A>Как это записать в современном C++, чтобы не было performance penalty? Без конструирования контейнера и т.п. Нормальных макросов же (как в Немерле), насколько я понимаю, не завезли?
например
#include <errno.h>
template <auto... set>
bool isin(auto val)
{
return (false || ... || (set == val));
}
int main()
{
//
if(isin<EAGAIN,
EWOULDBLOCK,
EINTR,
ENOSPC,
ENOBUFS,
ENOMEM>(errno))
{
return 0;
}
return 1;
}