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

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

Offset block_count = (cpfs->geo.block_size - block_offset) <? count;
cpfs.c:473: error: expected expression before ‘?’ token
37
задан Yu Hao 6 May 2015 в 11:46
поделиться

2 ответа

Последние руководства говорят :

Операторы минимума и максимума G ++ (' ' и '>? ') и их составные формы (' ') и' >? = ') устарели и теперь удалены из G ++. Код, использующий эти операторы, следует изменить так, чтобы вместо них использовались std :: min и std :: max .

Быстрый поиск прошлых документов, кажется, показывает, что они были удалены примерно в версии 4.0 (3.4.6 включает их, 4.0.4 нет).

38
ответ дан 27 November 2019 в 04:56
поделиться

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

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

8
ответ дан 27 November 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: