Typedef mismatch

Несоответствие между typedef операторы

Описание

Эта проверка деактивирована в Polyspace по умолчанию® по мере анализа You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access).

Этот дефект возникает при typedef операторы приводят к конфликтующим базовым типам для одного из следующих типов данных:

  • size_t

  • ssize_t

  • wchar_t

  • ptrdiff_t

Риск

Если вы изменяете базовый тип size_t, ssize_t, wchar_t, или ptrdiff_t, у вас есть несогласованные определения того же типа. Модули компиляции с различными путями включения могут потенциально использовать различные по размеру типы, вызывающие конфликты в вашей программе.

Например, скажите, что вы задаете функцию в одном модуле компиляции, которая переопределяет size_t как беззнаковое длинное. Но в другом модуле компиляции, который использует size_t определение из <stddef.h>, вы используете ту же функцию как extern декларация. Ваша программа столкнется с несоответствием между объявлением функции и определением функции.

Зафиксировать

Используйте допустимые определения типов. Для примера:

  • Удалите пользовательские определения типов для этих основных типов. Используйте только определения систем.

  • Используйте тот же размер для всех модулей компиляции. Переместите typedef в общий заголовочный файл.

Примеры

расширить все

file1.c:

#include <stddef.h>

void func1()
{
    size_t var = 0;
    /*... more code ... */
}

file2.c:

typedef unsigned char size_t;

void func2()
{
    size_t var = 0;
    /*... more code ... */
}

В этом примере Polyspace помечает определение size_t в file2.c как дефект. Это определение является typedef несоответствие, потому что другой файл в вашем проекте, file1.c, включает stddef.h, который определяет size_t как беззнаковое длинное.

Коррекция - Использование определения системы

Одной из возможных коррекций является использование определения системы size_t в stddef.h чтобы избежать конфликтующих определений типов.

file1.c:

#include <stddef.h>

void func1()
{
    size_t var = 0;
    /*... more code ... */
}

file2.c:

#include <stddef.h>

void func2()
{
    size_t var = 0;
    /*... more code ... */
}
Коррекция - Использование файла общего заголовка

Одной из возможных коррекций является использование общего заголовочного файла для хранения вашего определения типа, которое включается в оба файла.

types.h:

typedef unsigned char size_t;

file1.c:

#include "types.h"

void func1()
{
    size_t var = 0;
    /*... more code ... */
}

file2.c:

#include "types.h"

void func2()
{
    size_t var = 0;
    /*... more code ... */
}

Информация о результатах

Группа: Программирование
Язык: C | C++
По умолчанию: On
Синтаксис командной строки: TYPEDEF_MISMATCH
Влияние: Высокий
Введенный в R2016b