-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
.Никакое значение по умолчанию
Используя кнопку, добавьте строку для макроса, который вы хотите задать. Определение должно быть в формате
. Если вы хотите, чтобы Polyspace проигнорировал макрос, оставьте Macro=Value
незаполненный
.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
.
Можно задать только один флаг с каждой опцией -D
. Однако можно задать опцию многократно.
Параметр: -D |
Никакое значение по умолчанию |
Значение:
|
Пример (средство поиска ошибки):
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 |