-enum-type-definition
)Задайте, как представлять enum
с базовым типом
Позвольте анализу использовать различные базовые типы, чтобы представлять перечислимый тип, в зависимости от значений перечислителя и выбранного определения. При использовании этой опции каждый тип enum
представлен самым маленьким целочисленным типом, который может содержать его перечислимые величины.
Эта опция доступна на узле Target & Compiler в панели Configuration.
Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Target & Compiler.
Командная строка: Используйте опцию -enum-type-definition
. Смотрите информацию о Командной строке.
Ваш компилятор представляет переменные enum
как константы основного целочисленного типа. Используйте эту опцию так, чтобы можно было эмулировать компилятор.
Чтобы проверять ваши параметры компилятора, скомпилируйте этот код с помощью параметров компилятора, которые вы обычно используете:
#include <assert.h> #include <limits.h> enum { MAXSIGNEDBYTE=127 } mysmallenum_t; int dummy[(int)sizeof(mysmallenum_t) - (int)sizeof(int)]; /* Breakpoint 1 */ enum { MYMAXINT = INT_MAX } myintenum_t; int main(void) { assert((MYMAXINT + 1) < 0); /* Breakpoint 2 */ assert((MYMAXINT + 1) >= 0); /* Breakpoint 3 */ assert(0); /* Breakpoint 4 */ return 0; }
assert
не ведут себя как ожидалось. Проверяйте свою документацию компилятора и измените ваши параметры компилятора. Если компиляция перестала работать в:
Точка останова 1: Используйте defined-by-compiler
для этой опции.
Точка останова 2: Используйте auto-signed-first
для этой опции.
Точка останова 3: Используйте auto-unsigned-first
для этой опции.
Значение по умолчанию:
defined-by-compiler
defined-by-compiler
Использует тип целого числа со знаком для всех компиляторов кроме гну, лязга и управления задачами.
Для гну и компиляторов лязга, это использует первый тип, который может содержать все значения перечислителя из этого списка: signed int
, unsigned int
, signed long
, unsigned long
, signed long long
и unsigned long long
.
Для компилятора управления задачами это использует первый тип, который может содержать все значения перечислителя из этого списка: char
, unsigned char
, short
, unsigned short
, int
и unsigned int
.
auto-signed-first
Использует первый тип, который может содержать все значения перечислителя из этого списка: signed char
, unsigned char
, signed short
, unsigned short
, signed int
, unsigned int
, signed long
, unsigned long
, signed long long
и unsigned long long
.
auto-unsigned-first
Использует первый тип, который может содержать все значения перечислителя из этих списков:
Если значения перечислителя положительны: unsigned char
, unsigned short
, unsigned int
, unsigned long
и unsigned long long
.
Если одно или несколько значений перечислителя отрицательны: signed char
, signed short
, signed int
, signed long
и signed long long
.
Параметр:
-enum-type-definition |
Значение:
defined-by-compiler | auto-signed-first | auto-unsigned-first |
Значение по умолчанию:
defined-by-compiler |
Пример (средство поиска ошибки):
polyspace-bug-finder -enum-type-definition auto-signed-first |
Пример (программа автоматического доказательства кода):
polyspace-code-prover -enum-type-definition auto-signed-first |
Пример (сервер средства поиска ошибки): polyspace-bug-finder-server -enum-type-definition auto-signed-first |
Пример (сервер программы автоматического доказательства кода):
polyspace-code-prover-server -enum-type-definition auto-signed-first |