MISRA C++:2008 Rule 3-2-1

Все объявления объекта или функции должны иметь совместимые типы

Описание

Это средство проверки деактивировано в Polyspace® по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access).

Управляйте определением

Все объявления объекта или функции должны иметь совместимые типы.

Объяснение

Если объявления объекта или функции в двух различных модулях перевода имеют несовместимые типы, поведение не определено.

Реализация Polyspace

Polyspace полагает, что два типа совместимы, если у них есть тот же размер и со знаком в среде, которую вы используете. Средство проверки не повышено на неиспользованном коде такой как

  • Неинстанцированные шаблоны

  • Невостребованный static или extern функции

  • Невостребованные и неопределенные локальные функции

  • Неиспользованные типы и переменные

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

file1.cpp


typedef          char         char_t;
typedef signed   short        int16_t;
typedef signed   long         int64_t;

namespace bar {
	int64_t a;
	int16_t c;  

};

file2.cpp


typedef          char         char_t;
typedef signed   int          int32_t;

namespace bar {
	extern char_t c;// Noncompliant
	extern int32_t a;
	void foo(void){
		++a;
		++c;
	}
}; 

В этом примере, переменной bar::c задан как char в file2.cpp и как signed short в file1.cpp. В целевом процессоре i386, размер этих типов не равен. Polyspace отмечает определение bar::c.

Переменная bar::a задан как long в file1.cpp и как int в file2.cpp. В целевом процессоре i386, оба int и long имеет размер 32 битов. Поскольку определения bar::a совместимо в обоих файлах, Polyspace не повышает флаг.

Проверяйте информацию

Группа: фундаментальные понятия
Категория: необходимый
Введенный в R2013b