Перечислимое определение типа (-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;
}
Если компиляция не перестала работать даже в точке останова 4, ваши операторы 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