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

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

Описание

Эта проверка деактивирована в Polyspace по умолчанию® по мере анализа You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (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