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 не определено. Однако определение env_var находится в #ifdef _WIN32 оператор. Основной причиной ошибки является то, что макрос _WIN32 не определен. Вы должны определить _WIN32.

Настройки

По умолчанию нет

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

Для примера:

  • name1=name2 заменяет все образцы name1 по name2.

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

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

Совет

  • Если Polyspace не поддерживает не-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
Пример (Bug Finder): polyspace-bug-finder -D HAVE_MYLIB -D int32_t=int
Пример (Code Prover): polyspace-code-prover -D HAVE_MYLIB -D int32_t=int
Пример (Bug Finder Server): polyspace-bug-finder-server -D HAVE_MYLIB -D int32_t=int
Пример (Code Prover Server): polyspace-code-prover-server -D HAVE_MYLIB -D int32_t=int