Typedef mismatch

Не сочетайтесь между typedef операторы

Описание

Это средство проверки деактивировано в Polyspace® по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (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
Удар: высоко
Введенный в R2017b