Условная операция

Условная операция

В языке Си имеется одна тернарная операция — уловная. Она имеет следующий синтаксис:

<операнд1> ? <операнд2>: <операнд3>

Выражение <операнд1> вычисляется и сравнивается с нулем. Выражение может иметь целый, плавающий тип, либо быть указателем. Если <операнд1> имеет ненулевое значение, то вычисляется <операнд2> и результатом условной операции является его значение. Если же <операнд1> равен нулю, то вычисляется <операнд3> и результатом является его значение. В любом случае вычисляется только один из операндов, <операнд2> или <операнд3>, но не оба.

Тип результата зависит от типов второго и третьего операндов (они могут различаться) следующим образом:

1) Если второй и третий операнды имеют целый или плавающий тип, то выполняются преобразования по умолчанию. Типом результата является тип операндов после преобразования.

2) Второй и третий операнды могут быть структурами, объединениями или указателями одного и того же типа. Типом результата будет тот же самый тип структуры, объединения или указателя.

3) Если либо второй, либо третий операнд имеет тип void (например, является вызовом функции, тип значения которой void), то другой операнд также должен иметь тип void, и результат имеет тип void.

4) Если либо второй, либо третий операнд является указателем на какой-либо тип, а другой является указателем на void, то результат имеет тип указатель на void.

5) Если либо второй, либо третий операнд является указателем, то другой может быть константным выражением со значением 0. Типом результата является указатель.

Пример:

j = (i < 0 )?(-i) : (i);

В примере j присваивается абсолютное значение i. Если i меньше нуля, то j присваивается -i. Если i больше или равно нулю, то j присваивается i.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

Условная переменная

Из книги автора

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


Операция

Из книги автора

Операция В третьей сверху секции прямоугольника записываются операции или методы класса. Операция (operation) представляет собой некоторый сервис, предоставляющий каждый экземпляр класса по определенному требованию. Совокупность операций характеризует функциональный


8.5. Условная подстановка параметров

Из книги автора

8.5. Условная подстановка параметров Условная подстановка позволяет проверить, установлен ли определенный параметр, или использовать вместо его значения другое. Значение самого параметра при этом не изменяется. Допустимые виды условных подстановок перечислены в


R.16.3.1 Операция #

Из книги автора

R.16.3.1 Операция # Если непосредственно перед параметром в строке замены идет лексема #, то при подстановке параметр и операция # будут заменены на строку литералов, содержащую имя соответствующего параметра макровызова. В символьной константе или строке литералов,


R.16.3.2 Операция ##

Из книги автора

R.16.3.2 Операция ## Если в строке замены между двумя лексемами, одна из которых представляет параметр макроопределения, появляется операция ##, то сама операция ## и окружающие ее обобщенные пробелы удаляются. Таким образом, результат операции ## состоит в конкатенации.Пусть


R.16.5 Условная трансляция

Из книги автора

R.16.5 Условная трансляция С помощью препроцессора можно организовать условную трансляцию программы. Синтаксически это задается следующим образом:условное: часть-if части-elif opt часть-else opt строка-endifчасть-if: строка-if текстстрока-if: # if выражение-константа # ifdef


Операция ??

Из книги автора

Операция ?? Еще одной особенностью типов с разрешением принимать значения null, о которой вам следует знать, является то, что с такими типами можно использовать появившуюся в C# 2005 специальную операцию, обозначаемую знаком ??. Эта операция позволяет присвоить типу значение,


Условная компиляция

Из книги автора

Условная компиляция Другой пакет директив препроцессора (#if, #elif, #else, #endif) позволяет выполнить компиляцию блока программного кода по условию, базируясь на предварительно заданных символах. Классическим вариантом использования этих директив является идентификация блока


Условная компиляция

Из книги автора

Условная компиляция В этом разделе описываются директивы, которые управляют условной компиляцией. Эти директивы позволяют исключить из процесса компиляции какие-либо части исходного файла посредством проверки условий (константных


Условная обработка

Из книги автора

Условная обработка В XSLT имеются две инструкции, которые поддерживают условную обработку — xsl:if и xsl:choose. Инструкция xsl:if позволяет создавать простые условия типа "если-то", в то время как xsl:choose создает более сложную конструкцию для выбора одной из нескольких имеющихся


7.13 Условная Операция

Из книги автора

7.13 Условная Операция условное_выражение: выражение ? выражение : выражениеУсловная операция группирует слева направо. Вычисляется первое выражение, и если оно не 0, то результатом является значение второго выражения, в противном случае значение третьего выражения. Если


11.3 Условная Компиляция

Из книги автора

11.3 Условная Компиляция Командная строка компилятора вида#if выражениепроверяет, является ли результатом вычисления выражения не-ноль. Выражение должно быть константным выражением, котрые обсуждаются в #12. Кроме обычных операций С++ может ипользоваться унарная операция


Операция @

Из книги автора

Операция @ Операция @ применяется к переменной и возвращает ее адрес. Тип результата представляет собой типизированный указатель на тип переменной. Например: var r: real; pr: ^real := @r;


Операция new

Из книги автора

Операция new Операция new имеет вид: new ИмяКласса(ПараметрыКонструктора) Она вызывает конструктор класса ИмяКласса и возвращает созданный объект.Например: type My = class constructor Create(i: integer); begin end; end; var m: My := new My(5); Эквивалентным способом создания объекта является вызов


Условная Инструкция (Conditional)

Из книги автора

Условная Инструкция (Conditional) Эта инструкция задает различные формы обработки в зависимости от выполнения определенных условий. Основная форма:if boolean_expression theninstruction; instruction; ...elseinstruction; instruction; ...endгде каждая ветвь может иметь произвольное число инструкций (а возможно и не