-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
без знака 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 |
По умолчанию нет |
Значение:
|
Пример (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 |