Spec-Zone.ru › GCC 13 CPP

11.3 Устаревшие возможности

В CPP есть некоторые возможности, присутствующие в основном для совместимости со старыми программами. Мы не рекомендуем использовать их в новом коде. В некоторых случаях мы планируем удалить эту функцию в будущей версии GCC.

  • Утверждения

11.3.1 Утверждения

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

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

Утверждение выглядит следующим образом:

#predicate (answer)

predicate должно быть единственным идентификатором. answer может быть любой последовательностью токенов; все символы имеют значение, за исключением начальных и конечных пробелов, и различия во внутренних последовательностях пробелов игнорируются. (Это аналогично правилам переопределения макроса.) Таким образом, (x + y) отличается от (x+y), но эквивалентно ( x + y ). Скобки не вложены внутри ответа.

Чтобы проверить утверждение, вы записываете его в «#if». Например, это условное выражение выполняется успешно, если vax или ns16000 были утверждены в качестве ответа на machine.

#if #machine (vax) || #machine (ns16000)

Вы можете проверить, утверждено ли любое значение для предиката, опуская ответ в условном выражении:

#if #machine

Утверждения создаются с помощью директивы «#assert». Единственным аргументом является утверждение, без ведущего «#», которое определяет утверждения в условных выражениях.

#assert predicate (answer)

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

Утверждения можно отменить с помощью директивы «#unassert». У нее такая же синтаксическая структура, как у «#assert». В этом формате она отменяет только ответ, указанный в строке «#unassert»; другие ответы для данного предиката остаются истинными. Вы можете отменить весь предикат, опуская ответ:

#unassert predicate

В любом формате, если такое утверждение не было сделано, «#unassert» не имеет эффекта.

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

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/cpp/Obsolete-Features.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API