Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Почему не проверяется условие else if - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Application has failed to start because the application configuration is incorrect (+LNK4099, 4098) http://www.cyberforum.ru/cpp-beginners/thread1237164.html
Получил тестовое задание на джуна C++. Проект - Недоделанный арканоид на собственном движке конторы. Моя задача допилить игру. В задании 2 варианта solution'ов: под MS Visual Studio 2008 и под...
C++ Множественное наследование - когда оно действительно нужно? Здравствуйте! До изучения языка C++ я программировал на языках типа Java и C#, где множественное наследование от классов явно запрещено. Долгое время после я обходился без этой возможности. Много... http://www.cyberforum.ru/cpp-beginners/thread1237158.html
C++ Сортировка книг по убыванию года изнания
2) Написать программу сортировки книг в массиве структур по убыванию года издания
Скопировать одну структуру в другую C++
1) Написать программу копирования одной структуры (с информацией о книге) в другую
C++ Получить данные о службах Windows с возможностью управления ими http://www.cyberforum.ru/cpp-beginners/thread1237132.html
Всем привет! я новичок в программировании. Подскажите получить данные о службе, сколько берет оперативной памяти, запущена или нет. И возможность запустить ее или перезагрузить.
C++ Создание VPN сети, RAS API Здравствуйте, я создал небольшой чат, основанный на сокетах. Чтобы клиент подключился к серверу с другого ПК требуется VPN. Хотелось бы попробовать написать клиент для подключения к VPN сети, а еще... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17954 / 6185 / 414
Регистрация: 30.03.2009
Сообщений: 16,974
Записей в блоге: 27
02.08.2014, 15:42
Забыл написать, что бывают случаи, когда внутри условия действительно пишут присваивание, а не сравнение. Казалось бы, что такие коды лучше переписать. Т.е. для if'а вместо

C
if (x=a)
лучше написать

C
x = a;
if (x)
Но в сложных случаях такую замену написать нетривиально:

C
if ((x = func1() && func2(x) < 10)
    || (y = func3() && func4(y) < 10))
или

C
while (x = func())
Другими словами, существуют реально востребованные случаи, когда внутри условия действительно было бы эффективным написать оператор присваивания. А потому выдача предупреждения со стороны компилятора является избыточной. По негласному соглашению в таких случаях обычно экранируют присваивание дополнительной парой скобок, чтобы компилятор различал случаи, в которых действительно не надо выдавать предупреждение

C
if (x = a) /* предупреждение есть */
if ((x = a)) /* предупреждения нет */
Добавлено через 5 минут
Цитата Сообщение от intern Посмотреть сообщение
Как по мне, то вместо
C++
1
if (D==0)
проще использовать
C++
1
if (!D)
Вопрос исключительно религиозный.

В таких случаях я руководствуюсь следующей логикой. Если D имеет по смыслу булевский тип (т.е. 0 = нет, остальное = да), то пишу if (!D). Если D имеет целочисленный тип, то пишу if (D == 0). При таком подходе меньше возникает пониманий со сложными конструкциями

C
if (is_a_ok && !is_b_ok && (is_c_ok || is_d_ok))
понимать проще, чем

C
if (is_a_ok == true && is_b_ok == false && (is_c_ok == true || is_d_ok == true))
Точно так же код

C
if (a == 0 && b != 0 && (c == 0 || d == 0))
понимать проще, чем

C
if (a && !b && (!c || !d))
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru