exponenta event banner

Правило AUTOSAR C++ 14 M3-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 не поднимает флаг.

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

Группа: Основные понятия
Категория: Обязательно, Автоматизировано
Представлен в R2019a