Preprocessor definitions (-D)

Замените макросы в предварительно обработанном коде

Описание

Замените макросы на их определения в предварительно обработанном коде.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Macros.

Командная строка: Используйте опцию -D. Смотрите информацию о командной строке.

Почему использование эта опция

Используйте эту опцию, чтобы эмулировать ваше поведение компилятора. Например, если ваш компилятор рассматривает макро-_WIN32 как задано, когда вы создаете свой код, он выполняет код в #ifdef _WIN32 оператор. Если Polyspace® не полагает, что макрос, как задано, необходимо использовать эту опцию, чтобы заменить макрос на 1.

В зависимости от ваших настроек для Compiler (-compiler), некоторые макросы заданы по умолчанию. Используйте эту опцию, чтобы задать макросы, которые неявно не заданы.

Как правило, вы распознаете от ошибок компиляции, что определенный макрос не задан. Например, следующий код не компилирует если макро-_WIN32 не задан.

#ifdef _WIN32
  int env_var;
#endif

void set() {
  env_var=1;
}
Сообщение об ошибке утверждает тот env_var isundefined. Однако определение env_var находится в #ifdef _WIN32 оператор. Первопричина для ошибки состоит в том что макро-_WIN32 не задан. Необходимо задать _WIN32.

Настройки

Никакое значение по умолчанию

Используя кнопку, добавьте строку для макроса, который вы хотите задать. Определение должно быть в формате Macro=Value. Если вы хотите, чтобы Polyspace проигнорировал макрос, оставил Value пробел.

Например:

  • name1=name2 замены все экземпляры name1 name2.

  • name= дает программному обеспечению команду игнорировать name.

  • name без равняется знаку, или значение заменяет все экземпляры name 1. Задавать макрос, чтобы выполнить код в #ifdef macro_name оператор, используйте этот синтаксис.

Советы

  • Если Polyspace не поддерживает non-ANSI® ключевое слово и показывает ошибку компиляции, используйте эту опцию, чтобы заменить все случаи ключевого слова с пустой строкой в предварительно обработанном коде. Замена происходит только в целях анализа. Ваш код первоисточника остается неповрежденным.

    Например, если ваш компилятор поддерживает __far ключевое слово, чтобы избежать ошибок компиляции:

    • В пользовательском интерфейсе (только десктопные решения), введите __far=.

    • На командной строке используйте флаг -D __far=.

    Программное обеспечение заменяет __far ключевое слово с пустой строкой во время предварительной обработки. Например:

    int __far* pValue;
    преобразован в:
    int * pValue;

  • Polyspace распознает ключевые слова, такие как restrict и не позволяет их использование в качестве идентификаторов. Если вы используете те ключевые слова в качестве идентификаторов (потому что ваш компилятор не распознает их ключевыми словами), замените запрещенное имя на другое имя с помощью этой опции. Замена происходит только в целях анализа. Ваш код первоисточника остается неповрежденным.

    Например, чтобы позволить использование restrict как идентификатор:

    • В пользовательском интерфейсе введите restrict=my_restrict.

    • На командной строке используйте флаг -D restrict=my_restrict.

  • Ваша спецификация компилятора определяет значения многих специфичные для компилятора макросы. В случае, если вы хотите знать, как Polyspace задает определенный макрос, используйте опцию -dump-preprocessing-info.

    • Чтобы заменить макроопределение, прибывающее из спецификации компилятора, используйте эту опцию.

    • Чтобы не задать макрос, используйте опцию Disabled preprocessor definitions (-U).

Информация о командной строке

Можно задать только один флаг с каждым -D опция. Однако можно задать опцию многократно.

Параметр: -D
Никакое значение по умолчанию
Значение: flag=value
Пример (средство поиска ошибки): polyspace-bug-finder -D HAVE_MYLIB -D int32_t=int
Пример (программа автоматического доказательства кода): polyspace-code-prover -D HAVE_MYLIB -D int32_t=int
Пример (сервер средства поиска ошибки): polyspace-bug-finder-server -D HAVE_MYLIB -D int32_t=int
Пример (сервер программы автоматического доказательства кода): polyspace-code-prover-server -D HAVE_MYLIB -D int32_t=int