Enum type definition (-enum-type-definition)

Задайте, как представлять enum с базовым типом

Описание

Позвольте анализу использовать различные базовые типы, чтобы представлять перечислимый тип, в зависимости от значений перечислителя и выбранного определения. При использовании этой опции, каждого enum тип представлен самым маленьким целочисленным типом, который может содержать его перечислимые величины.

Эта опция доступна на узле Target & Compiler в панели Configuration.

Установите опцию

Пользовательский интерфейс (только десктопные решения): В вашей настройке проекта опция находится на узле Target & Compiler.

Командная строка и файл опций: Используйте опцию -enum-type-definition. Смотрите информацию о командной строке.

Почему использование эта опция

Ваш компилятор представляет enum переменные как константы основного целочисленного типа. Используйте эту опцию так, чтобы можно было эмулировать компилятор.

Проверять ваши параметры компилятора:

  1. Скомпилируйте этот код с помощью параметров компилятора, которые вы обычно используете:

    enum { MAXSIGNEDBYTE=127 } mysmallenum_t;
    
    int dummy[(int)sizeof(mysmallenum_t) - (int)sizeof(int)];
    
    Если компиляция перестала работать, необходимо использовать один из auto-signed-first или auto-unsigned-first.

  2. Скомпилируйте этот код с помощью параметров компилятора, которые вы обычно используете:

    #include <limits.h>
    
    enum { MYINTMAX = INT_MAX } myintenum_t;
    
    int dummy[(MYINTMAX + 1) < 0 ? -1:1];
    

    Если компиляция перестала работать, используйте auto-signed-first для этой опции в противном случае используйте auto-unsigned-first.

Настройки

Значение по умолчанию: defined-by-compiler

defined-by-compiler

Использует тип целого числа со знаком для всех компиляторов кроме гну, лязга и управления задачами.

Для гну и компиляторов лязга, это использует первый тип, который может содержать все значения перечислителя из этого списка: unsigned int, signed int, unsigned long, signed long, unsigned long long и signed 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
Пример (Bug Finder): polyspace-bug-finder -enum-type-definition auto-signed-first
Пример (программа автоматического доказательства кода): polyspace-code-prover -enum-type-definition auto-signed-first
Пример (сервер Bug Finder): polyspace-bug-finder-server -enum-type-definition auto-signed-first
Пример (сервер программы автоматического доказательства кода): polyspace-code-prover-server -enum-type-definition auto-signed-first