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