Как объединить два условия if в одно

138
15 июля 2021, 05:00

Мне нужно объединить два условия if в одно условие.

Код который внизу, полностью рабочий, но он с двумя условиями if

if (!(bind(ServSock[i], AI->ai_addr, (int)AI->ai_addrlen) == SOCKET_ERROR
    || SocketType == SOCK_STREAM && listen(ServSock[i], 5) == SOCKET_ERROR))
{
    // пусто
}
else
{
    // второе условия которое надо запихать в первое
    if (i == 0 && AI->ai_next == NULL)
    {
        код 1
        continue;
    }
}
код 2
// прошу заметить код 2 находиться за условием

В конце должно получиться что то в этом роде. Как видите даже else не будет в коде.

if (условие)
{
   код 1
   continue;
}
код 2
Answer 1

Достаточно убрать отрицание в начале первого условия и объединить со вторым условием оператором И

if (
    (
      bind(ServSock[i], AI->ai_addr, (int)AI->ai_addrlen) == SOCKET_ERROR
      || SocketType == SOCK_STREAM
      && listen(ServSock[i], 5) == SOCKET_ERROR
    )
    && (i == 0 && AI->ai_next == NULL)
   )
{
}

но вам в комментариях правильно подсказывают, что лучше разбить на несколько простых условий, это будет понятнее.

Answer 2

Конструкция:

if (X) {
}
else {
    if (Y) {
        // do smth
    }
}

Эквивалентна:

if (!X && Y) {
    // do smth
}

Но так как в вашем случае X и Y это громоздкие выражения, я бы написал:

if (!X) {
    if (Y) {
        // do smth
    }
}

Или даже, по позможности, зарефакторил это к такому виду:

if (X1) {
    return;
}
if (X2) {
    return;
}
if (!Y1) {
    return;
}
if (!Y2) {
    return;
}
//do smth

где Xn Yn простые человекочитаемые выражения.

READ ALSO
Unresolved external symbol cv::waitKey

Unresolved external symbol cv::waitKey

Работаю с OpenCV в среде MSVC2017

78
Открытие qml окна с С++

Открытие qml окна с С++

Всем приветНикак не могу открыть обычное qml окно с стороны С++

78
Как работает подключение connect?

Как работает подключение connect?

Как устроена функция connect? Как лучше реализовать, стоит ли подключать 2 или 10 соединений с разными серверамиЧто будет, если подключений больше...

90