Расширение C: <? и>? операторы
Я заметил, что в какой-то момент был a <?
и >?
в GCC. Как я могу использовать их в GCC 4.5? Удалены ли они, и если да, то когда?
Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
Ответы
Ответ 1
Последние руководства сказать:
Минимальные и максимальные операторы g++ ('<?
и' >?
) и их составные формы ('<?=
) и >?=
) устарели и теперь удалены из g++. Код с использованием этих операторов должен быть изменен для использования std::min
и std::max
.
Быстрый поиск прошлых документов, по-видимому, указывает на то, что они были удалены около версии 4.0 (3.4.6 включает в себя, 4.0.4 - нет).
Ответ 2
Ранее итерации g++
(а не компилятора C) использовали эти операторы для предоставления минимальных или максимальных значений, но они долгое время не одобрялись в пользу std::min
и std::max
.
В основном, они приравниваются к (но без возможности двойной оценки a
или b
):
a <? b --> (a < b) ? a : b
a >? b --> (a > b) ? a : b
С точки зрения их замены (и вы действительно должны их заменить), вы можете использовать что-то вроде:
Offset block_count = cpfs->geo.block_size - block_offset;
if (block_count > count) block_count = count;
или эквиваленты с помощью std::min
.
Я не большой поклонник использования расширений C/С++ (особенно тех, которые устарели и/или удалены), поскольку они привязывают меня к конкретной реализации языка.
Вы не должны использовать нестандартное расширение, где доступен вполне подходящий стандартный метод.