«Обратно» Условные выражения в Си
130 просмотра
4 ответа
Я просматриваю некоторый код и нашел некоторые странные условия, а именно:
if (NULL != buf) {...}
Мне было интересно, была ли какая-то конкретная причина для написания условного выражения, подобного этому, вместо
if(buf != NULL){...}
Я не вижу причин делать это первым делом, но я не думаю, что это было ошибкой. Мне кажется, что они выполняют одно и то же, но второй способ более интуитивен. Есть ли какая-то конкретная причина использовать первое условное выражение?
Автор: Justin Wang Источник Размещён: 13.11.2019 11:48Ответы (4)
7 плюса
Да, это называется " Йода условия ". Идея состоит в том, чтобы случайно не присвоить значение, когда вы хотите выполнить проверку. Большинство современных компиляторов должны это уловить.
Автор: rost0031 Размещён: 30.06.2015 04:364 плюса
Это, чтобы избежать опечатки новичка, как if (buf = NULL)
.
if (NULL = buf)
приводит к ошибке компиляции, в то время if (buf = NULL)
как полностью корректно с нежелательной семантикой.
3 плюса
Концепция в основном такова:
Часто новые ученики пропускают двойной знак равенства ==
и =
вместо этого используют один . Поэтому инструкторы учат их этому методу, чтобы они не застревали в простых программах.
Если не включены предупреждения компилятора, если вы сделаете это:
if(buf = NULL)
Вы в основном назначаете NULL buf
, что не является синтаксически неправильным, и вы не получите никаких предупреждений, но когда вы сделаете это:
if(NULL = buf)
компилятор выдает ошибку, потому что знает, что вы ничего не можете присвоить NULL.
Почему именно Йода?
Это из-за персонажа Йоды из «Звездных войн», чьи диалоги были оформлены в обратном порядке, например «Голубое небо».
Вы можете прочитать более интересные термины кодирования здесь .
Автор: Ayushi Jha Размещён: 30.06.2015 04:412 плюса
Это даст ошибку компилятора, если выражение сравнения неправильно введено как выражение присваивания.
Например, если вы компилируете
if (buf = NULL) {}
компилятор говорит,
предупреждение: предложить круглые скобки вокруг присваивания, используемого в качестве значения истины [-Wparentheses]
но если вы измените его на
if (NULL = buf) {}
теперь компилятор говорит:
Автор: Shreevardhan Размещён: 30.06.2015 04:41ошибка: lvalue требуется как левый операнд присваивания
Вопросы из категории :
- c Как вы форматируете unsigned long long int, используя printf?
- c What are the barriers to understanding pointers and what can be done to overcome them?
- c Как реализовать продолжения?
- c Как вы передаете функцию в качестве параметра в C?
- c Как получить список каталогов в C?
- c В чем разница между #include <filename> и #include "filename"?
- c Всегда ли выгодно использовать «goto» в языке, который поддерживает циклы и функции? Если так, то почему?
- c В чем разница между ++ i и i ++?
- c Есть ли разница в производительности между i ++ и ++ i в C?
- c Какой самый лучший бесплатный детектор утечки памяти для программы на C / C ++ и ее подключаемых библиотек DLL?
- conditional PHP условные, скобки нужны?
- conditional mysql подсчитывает строки дочерней таблицы с условием
- conditional MySQL Условная Вставка
- conditional How to write a switch statement in Ruby
- conditional Какие операторы PHP "?" и ":" звонили и что они делают?
- conditional условное соединение в mysql
- conditional Как сравнивать строки в условных директивах препроцессора C
- conditional условное утверждение для разрешения экрана?
- conditional условное отображение форм элементов html
- conditional Makefile условно с automake / autoconf