Подтвердить что ты не робот

Расширение C: <? и>? операторы

Я заметил, что в какой-то момент был a <? и >? в GCC. Как я могу использовать их в GCC 4.5? Удалены ли они, и если да, то когда?

Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
4b9b3361

Ответ 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/С++ (особенно тех, которые устарели и/или удалены), поскольку они привязывают меня к конкретной реализации языка.

Вы не должны использовать нестандартное расширение, где доступен вполне подходящий стандартный метод.