В быстром аналитическом режиме Средство поиска Ошибки проверяет на подмножество дефектов и кодирующих правил только. Таблицы ниже приводят результаты, которые могут быть найдены в быстром анализе. См. также Use fast analysis mode for Bug Finder (-fast-analysis)
.
Статическое ЗУ
Имя | Описание |
---|---|
Переполнение буфера от неправильного спецификатора формата строки ( str_format_buffer_overflow ) | Спецификатор формата строки заставляет буферный аргумент стандартных библиотечных функций переполняться |
Ненадежный бросок указателя функции ( func_cast ) | Бросок указателя функции к другому указателю функции с различным аргументом или возвращает тип |
Ненадежный бросок указателя ( ptr_cast ) | Указатель неявно бросок к различному типу данных |
Программирование
Имя | Описание |
---|---|
Копия перекрывающейся памяти ( overlapping_copy ) | Источник и целевые аргументы функции копии имеют перекрывающуюся память |
Исключение отловлено значением ( excp_caught_by_value ) | Оператор |
Обработчик исключений скрыт предыдущим обработчиком ( excp_handler_hidden ) | Оператор |
Спецификаторы строки формата и несоответствие аргументов ( string_format ) | Спецификаторы строки не совпадают с соответствующими аргументами |
Неподходящая инициализация массивов ( improper_array_init ) | Неправильная инициализация массивов при использовании инициализаторов |
Недопустимое использование == (равенство) оператор ( bad_equal_equal_use ) | Операция Equality в операторе присваивания |
Недопустимое использование = (присвоение) оператор ( bad_equal_use ) | Присвоение в условном операторе |
Недопустимое использование операции с плавающей точкой ( bad_float_op ) | Неточное сравнение переменных с плавающей точкой |
Недостающий пустой указатель в массиве строк ( missing_null_char ) | Строка не останавливается с нулевым символом |
Перекрывающееся присвоение ( overlapping_assign ) | Перекрытие памяти между левыми и правыми сторонами присвоения |
Возможно непреднамеренная оценка выражения из-за правил приоритета оператора Приоритет операторов | Правила приоритета оператора вызывают неожиданный порядок оценки в арифметическом выражении |
Небезопасное преобразование между указателем и целым числом ( bad_int_ptr_cast ) | Неправильно выровненные или недопустимые результаты преобразований между типами указателей и целочисленными типами |
Неправильно введите используемый в sizeof ( ptr_sizeof_mismatch ) | Аргумент |
Поток данных
Имя | Описание |
---|---|
Код деактивирован постоянным ложным условием ( deactivated_code ) | Сегмент кода деактивирован директивой |
Пропавшие без вести оператора возврата ( missing_return ) | Функция не делает возвращаемого значения, хотя возвращаются, тип не является пустым |
Статическая невостребованная функция ( uncalled_func ) | Функция со статическим контекстом, не названным в файле |
Переменное затенение ( var_shadowing ) | Переменная скрывает другую переменную того же имени с вложенным осциллографом |
Объектно-ориентированный
Имя | Описание |
---|---|
*this , не возвращенный в операторе присваивания копии( return_not_ref_to_this ) | оператор = метод не возвращает указатель на текущий объект |
Оператор присваивания базового класса, не названный ( missing_base_assign_op_call ) | Оператор присваивания копии не вызывает операторы присваивания копии основных подобъектов |
Деструктор базового класса, не виртуальный ( dtor_not_virtual ) | Класс не может вести себя полиморфно для удаления объектов производного класса |
Скопируйте конструктора, не названного в списке инициализаций ( missing_copy_ctor_call ) | Конструктор копии не вызывает конструкторов копии некоторых участников или базовых классов |
Несовместимые типы предотвращают переопределение ( virtual_func_hiding ) | Метод производного класса скрывает виртуальный метод базового класса вместо того, чтобы заменить его |
Участник, не инициализированный в конструкторе ( non_init_member ) | Конструктор не инициализирует некоторых членов класса |
Пропавшие без вести явного ключевого слова ( missing_explicit_keyword ) | Конструктор, пропускающий явный спецификатор |
Пропавшие без вести виртуального наследования ( missing_virtual_inheritance ) | Базовый класс наследован фактически и нефактически в той же иерархии |
Объектное разрезание ( object_slicing ) | Объект производного класса, переданный значением, чтобы функционировать с параметром базового класса |
Частичное переопределение перегруженных виртуальных функций ( partial_override ) | Класс заменяет часть наследованных виртуальных функций с именем |
Возвратитесь из не указатель const на инкапсулированный элемент данных ( breaking_data_encapsulation ) | Метод возвращает указатель или ссылку на внутреннего члена объекта |
Сам присвоение, не протестированное в операторе ( missing_self_assign_test ) | Оператор присваивания копии не тестирует на самоприсвоение |
Безопасность
Имя | Описание |
---|---|
Указатель функции присвоен с абсолютным адресом ( func_ptr_absolute_addr ) | Константное выражение используется, когда функциональный адрес уязвим для инжекции кода |
Хорошая практика
Имя | Описание |
---|---|
Битовая и арифметическая операция на тех же данных ( bitwise_arith_mix ) | Оператор со смешанными битовыми и арифметическими операциями |
Удалите пустого указателя ( delete_of_void_ptr ) | удалите работает с указателем |
Трудно закодированный buffer size ( hard_coded_buffer_size ) | Размер буфера памяти является численным значением вместо символьной константы |
Трудно закодированный контур цикла ( hard_coded_loop_boundary ) | Контур цикла является численным значением вместо символьной константы |
Большой аргумент передачи значением ( pass_by_value ) | Большой аргумент передается значением между функциями |
Строка больше чем с одним оператором ( more_than_one_statement ) | Несколько операторов на строке |
Недостающий пропуск случая переключателя ( missing_switch_break ) | Никакие комментарии в конце случая переключателя без оператора завершения |
Недостающий сброс освобожденного указателя ( missing_freed_ptr_reset ) | Указатель, свободный не сопровождаемый оператором сброса, чтобы очистить оставшиеся данные |
Неиспользованный параметр ( unused_parameter ) | Прототип функции имеет параметры не чтение или написанный в теле функции |
Программное обеспечение проверяет следующие правила рано в анализ.
Расширения языка
Правило | Описание |
---|---|
2.1 | Ассемблер должен инкапсулироваться и изолироваться. |
2.2 | Исходный код должен только использовать комментарии стиля |
2.3 | Последовательность символов |
Документация
Правило | Описание |
---|---|
3.4 | Все использование директивы |
Наборы символов
Правило | Описание |
---|---|
4.1 | Только те escape-последовательности, которые заданы в стандарте ISO C, должны использоваться. |
4.2 | Trigraphs не должен использоваться. |
Идентификаторы
Правило | Описание |
---|---|
5.2 | Идентификаторы во внутреннем осциллографе не должны использовать то же имя в качестве идентификатора во внешнем осциллографе, и поэтому скрыть тот идентификатор. |
Типы
Правило | Описание |
---|---|
6.1 | Простой символьный тип должен использоваться только для устройства хранения данных и использования символьных значений. |
6.2 | Подписанный и символьный тип без знака должен использоваться только для устройства хранения данных и использования числовых значений. |
6.3 |
|
6.4 | Битовые поля должны только быть заданы, чтобы иметь тип |
6.5 | Битовые поля типа |
Константы
Правило | Описание |
---|---|
7.1 | Восьмеричные константы (кроме нуля) и восьмеричные escape-последовательности не должны использоваться. |
Объявления и определения
Правило | Описание |
---|---|
8.1 | Функции должны иметь объявления прототипа, и прототип должен быть видим в обоих функциональное определение и вызов. |
8.2 | Каждый раз, когда объект или функция объявлены или заданы, ее тип должен быть явным образом утвержден. |
8.3 | Для каждого параметра функции тип, данный в объявлении и определении, должен быть идентичным, и типы возврата должны также быть идентичными. |
8.5 | Не должно быть никаких определений объектов или функций в заголовочном файле. |
8.6 | Функции должны всегда объявляться в осциллографе файла. |
8.7 | Объекты должны быть заданы в области действия блока, если к ним только получат доступ из одной функции. |
8.8 |
Внешний объект или функция должны быть объявлены в одном файле и только одном файле. |
8.9 |
Идентификатор с внешней связью должен иметь точно одно внешнее определение. |
8.11 | Спецификатор класса памяти |
8.12 | Когда массив будет объявлен с внешней связью, ее размер должен быть утвержден явным образом или задан неявно инициализацией. |
Инициализация
Правило | Описание |
---|---|
9.2 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами. |
9.3 | В списке перечислителей построение |
Арифметическое преобразование типов
Правило | Описание |
---|---|
10.1 | Значение выражения целочисленного типа не должно быть неявно преобразовано в различный базовый тип если:
|
10.2 | Значение выражения типа с плавающей точкой не должно быть неявно преобразовано в другой тип если
|
10.3 | Значение сложного выражения целочисленного типа может только быть брошено к типу, который является более узким и того же самого, со знаком как базовый тип выражения. |
10.4 | Значение сложного выражения типа плавающего может только быть брошено к более узкому типу с плавающей точкой. |
10.5 | Если побитовый оператор |
10.6 | Суффикс "U" должен быть применен ко всем константам типов |
Преобразование типа указателя
Правило | Описание |
---|---|
11.1 | Преобразование не должно выполняться между указателем на функцию и любым типом кроме целочисленного типа. |
11.2 | Преобразование не должно выполняться между указателем на объект и любым типом кроме целочисленного типа, другим указателем на тип объекта или указателем на |
11.3 | Бросок не должен быть выполнен между типом указателя и целочисленным типом. |
11.4 | Бросок не должен быть выполнен между указателем на тип объекта и различным указателем на тип объекта. |
11.5 | Бросок не должен выполняться, который удаляет любой |
Выражения
Правило | Описание |
---|---|
12.1 | Ограниченная зависимость должна быть помещена в правила приоритета оператора К в выражениях. |
12.3 | Оператор |
12.5 | Операнды логического |
12.6 | Операнды логических операторов ( |
12.7 | Побитовые операторы не должны быть применены к операндам, базовый тип которых подписывается. |
12.9 | Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака. |
12.10 | Оператор запятой не должен использоваться. |
12.11 | Оценка постоянного выражения без знака не должна вести, чтобы повториться. |
12.12 | Базовые битные представления значений с плавающей точкой не должны использоваться. |
12.13 | Шаг ( |
Управляйте выражениями оператора
Правило | Описание |
---|---|
13.1 | Операторы присваивания не должны использоваться в выражениях тот урожай булевы значения. |
13.2 | Тесты значения против нуля должны быть сделаны явными, если операнд не является эффективно булевым. |
13.3 | Выражения с плавающей точкой не должны быть протестированы на равенство или неравенство. |
13.4 | Выражение управления оператора |
13.5 | Три выражения оператора |
13.6 | Числовые переменные, используемые в цикле |
Поток управления
Правило | Описание |
---|---|
14.3 | Все непустые операторы должны быть также
|
14.4 | Оператор |
14.5 | Оператор |
14.6 | Для любого оператора цикла должно быть самое большее используемое завершение цикла for оператора один |
14.7 | Функция должна иметь одну точку выхода в конце функции. |
14.8 | Оператор, формирующий тело |
14.9 |
|
14.10 | Все построения |
Операторы switch
Правило | Описание |
---|---|
15.0 | Недостижимый код обнаруживается между оператором |
15.1 | Метка |
15.2 | Безусловный оператор |
15.3 | Итоговый пункт оператора |
15.4 | Выражение |
15.5 | Каждый оператор |
Функции
Правило | Описание |
---|---|
16.1 | Функции не должны быть заданы с переменными количествами аргументов. |
16.3 | Идентификаторы должны быть даны для всех параметров в объявлении прототипа функции. |
16.5 | Функции без параметров должны быть объявлены с типом параметра |
16.6 | Количество аргументов, переданных функции, должно совпадать с количеством параметров. |
16.8 | Все выходные пути от функции с non- |
16.9 | Функциональный идентификатор должен только использоваться или с предыдущим |
Указатели и массивы
Правило | Описание |
---|---|
17.4 | Индексация массива должна быть единственной позволенной формой адресной арифметики с указателями. |
17.5 | Тип не должен содержать больше чем 2 уровня косвенности указателя. |
Структуры и объединения
Правило | Описание |
---|---|
18.1 | Вся структура или типы объединения должны быть завершены в конце модуля перевода. |
18.4 | Объединения не должны использоваться. |
Предварительная обработка директив
Правило | Описание |
---|---|
19.1 | Операторам |
19.2 | Нестандартные символы не должны происходить на имена заголовочного файла в директивах |
19.3 | Директива |
19.4 | C макросы только расширюсь до заключенного в фигурные скобки инициализатора, константы, заключенного в скобки выражения, спецификатора типа, спецификатора класса памяти, или построение "делает в то время как нуль". |
19.5 | Макросами не должен быть |
19.6 |
|
19.7 | Функция должна использоваться в предпочтении к функциональному подобному макросу. |
19.8 | Подобный функции макрос не должен быть вызван безо всех его аргументов. |
19.9 | Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив. |
19.10 | В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда |
19.11 | Все макро-идентификаторы в директивах препроцессору должны быть заданы перед использованием, кроме |
19.12 | Должно быть самое большее одно вхождение |
19.13 |
|
19.14 | Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм. |
19.15 | Меры предосторожности должны быть приняты в порядке предотвратить содержимое заголовочного файла, включаемого дважды. |
19.16 | Предварительная обработка директив должна быть синтаксически значимой, даже когда исключено препроцессором. |
19.17 | Весь |
Стандартные библиотеки
Правило | Описание |
---|---|
20.1 | Зарезервированные идентификаторы, макросы и функции в стандартной библиотеке, не должны быть заданы, переопределены или не определены. |
20.2 | Имена стандартных макросов библиотеки, объектов и функций не должны быть снова использованы. |
20.4 | Динамическое выделение памяти кучи не должно использоваться. |
20.5 | Ошибочный индикатор |
20.6 | Макро- |
20.7 | Макрос |
20.8 | Погрузочно-разгрузочное оборудование сигнала |
20.9 | Библиотека |
20.10 | Библиотечные функции |
20.11 | Библиотечные функции |
20.12 | Функции обработки времени библиотеки |
Стандарт C среда
Правило | Описание |
---|---|
1.1 | Программа не должна содержать нарушения стандартного Синтаксиса C и ограничения, и не должна превышать пределы перевода реализации. |
1.2 | Расширения языка не должны использоваться. |
Неиспользованный код
Правило | Описание |
---|---|
2.6 | Функция не должна содержать неиспользованные описания меток. |
2.7 | В функциях не должно быть никаких неиспользованных параметров. |
Комментарии
Правило | Описание |
---|---|
3.1 | Последовательности символов |
3.2 | Соединение строки не должно использоваться в комментариях |
Наборы символов и лексические соглашения
Правило | Описание |
---|---|
4.1 | Должны быть отключены восьмеричные и шестнадцатеричные escape-последовательности. |
4.2 | Trigraphs не должен использоваться. |
Идентификаторы
Правило | Описание |
---|---|
5.2 | Идентификаторы, объявленные в том же осциллографе и пространстве имен, должны быть отличными. |
5.3 | Идентификатор, объявленный во внутреннем осциллографе, не должен скрывать идентификатор, объявленный во внешнем осциллографе. |
5.4 | Макро-идентификаторы должны быть отличными. |
5.5 | Идентификаторы должны быть отличны от макро-имен. |
Типы
Правило | Описание |
---|---|
6.1 | Битовые поля должны только быть объявлены с соответствующим типом. |
6.2 | Одноразрядные именованные битовые поля не должны иметь типа со знаком. |
Литералы и константы
Правило | Описание |
---|---|
7.1 | Восьмеричные константы не должны использоваться. |
7.2 | Суффикс "u" или "U" должен быть применен ко всем целочисленным константам, которые представлены в типе без знака. |
7.3 | Символ нижнего регистра "l" не должен использоваться в литеральном суффиксе. |
7.4 | Строковый литерал не должен быть присвоен объекту, если тип объекта не будет "указателем на квалифицированный к const char". |
Объявления и определения
Правило | Описание |
---|---|
8.1 | Типы должны быть явным образом заданы. |
8.2 | Функциональные типы должны быть в прототипной форме с именованными параметрами. |
8.4 | Совместимое объявление должно быть видимо, когда объект или функция с внешней связью будут заданы. |
8.5 | Внешний объект или функция должны быть объявлены однажды в одном и только одном файле. |
8.6 | Идентификатор с внешней связью должен иметь точно одно внешнее определение. |
8.8 | Спецификатор класса памяти |
8.10 | Подставляемая функция должна быть объявлена с классом памяти |
8.11 | Когда массив с внешней связью объявляется, ее размер должен быть явным образом задан. |
8.12 | В рамках списка перечислителей значение неявно заданного постоянного перечисления должно быть уникальным. |
8.14 | Спецификатор типа |
Инициализация
Правило | Описание |
---|---|
9.2 | Инициализатор для агрегата или объединения должен быть заключен в фигурные скобки. |
9.3 | Массивы не должны быть частично инициализированы. |
9.4 | Элемент объекта не должен быть инициализирован несколько раз. |
9.5 | Где обозначенные инициализаторы используются, чтобы инициализировать объект массивов, что размер массива должен быть задан явным образом. |
Существенная модель типа
Правило | Описание |
---|---|
10.1 | Операнды не должны иметь несоответствующего существенного типа. |
10.2 | Выражения чрезвычайно типа символов не должны использоваться неуместно, кроме того, и операции вычитания. |
10.3 | Значение выражения не должно быть присвоено объекту с более узким существенным типом или различной существенной категории типа. |
10.4 | Оба операнда оператора, в котором выполняются обычные арифметические преобразования, должны иметь ту же существенную категорию типа. |
10.5 | Значение выражения не должно быть брошено к несоответствующему существенному типу. |
10.6 | Значение составного выражения не должно быть присвоено объекту с более широким существенным типом. |
10.7 | Если составное выражение будет использоваться в качестве одного операнда оператора, в котором обычные арифметические преобразования выполняются затем, то другой операнд не должен иметь более широкого существенного типа. |
10.8 | Значение составного выражения не должно быть брошено к различной существенной категории типа или более широкому существенному типу. |
Преобразование типа указателя
Правило | Описание |
---|---|
11.1 | Преобразования не должны выполняться между указателем на функцию и любым другим типом. |
11.2 | Преобразования не должны выполняться между указателем на неполный тип и любым другим типом. |
11.3 | Бросок не должен выполняться между указателем на тип объекта и указателем на различный тип объекта. |
11.4 | Преобразование не должно быть выполнено между указателем на объект и целочисленным типом. |
11.5 | Преобразование не должно быть выполнено от указателя, чтобы освободить в указатель на объект. |
11.6 | Бросок не должен выполняться между указателем на пустоту и арифметическим типом. |
11.7 | Бросок не должен выполняться между указателем на объект и типом арифметики нецелого числа. |
11.8 | Бросок не должен удалять const или энергозависимую проверку от типа, на который указывает указатель. |
11.9 | Макро- |
Выражения
Правило | Описание |
---|---|
12.1 | Приоритет операторов в рамках выражений должен быть сделан явным. |
12.3 | Оператор запятой не должен использоваться. |
12.4 | Оценка константных выражений не должна приводить к переносу беззнаковых целых чисел. |
Побочные эффекты
Правило | Описание |
---|---|
13.3 | Полное выражение, содержащее шаг ( |
13.4 | Результат оператора присваивания не должен использоваться. |
13.6 | Операнд оператора |
Управляйте выражениями оператора
Правило | Описание |
---|---|
14.4 | Выражение управления оператора |
Поток управления
Правило | Описание |
---|---|
15.1 | Оператор |
15.2 | Оператор |
15.3 | Любая метка, на которую ссылается оператор |
15.4 | Должен быть не больше, чем один оператор |
15.5 | Функция должна иметь одну точку выхода в конце |
15.6 | Тело оператора цикла или оператора выбора должно быть составным оператором. |
15.7 | Все построения |
Операторы switch
Правило | Описание |
---|---|
16.1 | Все операторы |
16.2 | Метка |
16.3 | Безусловный оператор |
16.4 | Каждый оператор |
16.5 | Метка |
16.6 | Каждый оператор |
16.7 |
|
Функции
Правило | Описание |
---|---|
17.1 | Функции |
17.3 | Функция не должна быть объявлена неявно. |
17.4 | Все выходные пути от функции с non- |
17.6 | Объявление параметра массива не должно содержать ключевое слово |
17.7 | Значение, возвращенное функцией, имеющей non- |
Указатели и массивы
Правило | Описание |
---|---|
18.4 |
|
18.5 | Объявления должны содержать не больше, чем два уровня вложения указателя. |
18.7 | Участники массива с переменными границами не должны быть объявлены. |
18.8 | Типы массива переменной длины не должны использоваться. |
Наложение устройства хранения данных
Правило | Описание |
---|---|
19.2 | Ключевое слово |
Предварительная обработка директив
Правило | Описание |
---|---|
20.1 | Директивам |
20.2 |
|
20.3 | Директива |
20.4 | Макрос не должен быть задан с тем же именем как ключевое слово. |
20.5 |
|
20.6 | Лексемы, которые похожи на директиву предварительной обработки, не должны происходить в макро-аргументе. |
20.7 | Выражения, следующие из расширения макро-параметров, должны быть заключены в круглые скобки. |
20.8 | Выражение управления |
20.9 | Всеми идентификаторами, используемыми в выражении управления |
20.10 |
|
20.11 | Макро-параметр сразу после оператора |
20.12 | Макро-параметр, используемый в качестве операнда к |
20.13 | Строка, первой лексемой которой является |
20.14 | Весь |
Стандартные библиотеки
Правило | Описание |
---|---|
21.1 |
|
21.2 | Зарезервированный идентификатор или макро-имя не должны быть объявлены. |
21.3 | Функции выделения памяти и освобождения |
21.4 | Стандартный заголовочный файл |
21.5 | Стандартный заголовочный файл |
21.6 | Стандартные функции ввода/вывода Библиотеки не должны использоваться. |
21.7 |
|
21.8 | Библиотечные функции |
21.9 | Библиотечные функции |
21.10 | Стандартные функции времени и даты Библиотеки не должны использоваться. |
21.11 | Стандартный заголовочный файл |
21.12 | Функции обработки исключений |
Независимые от языка проблемы
Правило | Описание |
---|---|
0-1-7 | Значение, возвращенное функцией, имеющей непустой тип возврата, который не является перегруженным оператором, должно всегда использоваться. |
0-1-11 | Не должно быть никаких неиспользованных параметров (названы или без имени) в не - виртуальные функции. |
0-1-12 | Не должно быть никаких неиспользованных параметров (названы или без имени) в наборе параметров для виртуальной функции и всех функций, которые заменяют его. |
0-2-1 | Объект не должен быть присвоен перекрывающемуся объекту. |
Общий
Правило | Описание |
---|---|
1-0-1 | Весь код должен соответствовать ISO/IEC 14882:2003 "Стандарт C++ Слияние Технического Исправления 1". |
Лексические соглашения
Правило | Описание |
---|---|
2-3-1 | Trigraphs не должен использоваться. |
2-5-1 | Диграфы не должны использоваться. |
2-7-1 | Последовательность символов/* не должна использоваться в рамках комментария C-стиля. |
2-10-1 | Различные идентификаторы должны быть типографским способом однозначными. |
2-10-2 | Идентификаторы, объявленные во внутреннем осциллографе, не должны скрывать идентификатор, объявленный во внешнем осциллографе. |
2-10-3 | Имя определения типа (включая проверку, если таковые имеются) должно быть уникальным идентификатором. |
2-10-4 | Класс, объединение или перечислимое имя (включая проверку, если таковые имеются) должны быть уникальным идентификатором. |
2-10-6 | Если идентификатор будет относиться к типу, он не должен также относиться к объекту или функции в том же осциллографе. |
2-13-1 | Только те escape-последовательности, которые заданы в ISO/IEC 14882:2003, должны использоваться. |
2-13-2 | Восьмеричные константы (кроме нуля) и восьмеричные escape-последовательности (кроме "\0") не должны использоваться. |
2-13-3 | Суффикс "U" должен быть применен ко всем восьмеричным или шестнадцатеричным целочисленным литералам типа без знака. |
2-13-4 | Литеральные суффиксы должны быть верхним регистром. |
2-13-5 | Узкие и широкие строковые литералы не должны быть конкатенированы. |
Фундаментальные понятия
Правило | Описание |
---|---|
3-1-1 | Должно быть возможно включать любой заголовочный файл в несколько модулей перевода, не нарушая Одно Правило Определения. |
3-1-2 | Функции не должны быть объявлены в области действия блока. |
3-1-3 | Когда массив будет объявлен, его размер должен или быть утвержден явным образом или задан неявно инициализацией. |
3-3-1 | Объекты или функции с внешней связью должны быть объявлены в заголовочном файле. |
3-3-2 | Если функция будет иметь внутреннюю связь затем, то все переобъявления должны включать статический спецификатор класса памяти. |
3-4-1 | Идентификатор, который, как объявляют, был объектом или типом, должен быть задан в блоке, который минимизирует его видимость. |
3-9-1 | Типы, используемые для объекта, функционального типа возврата или параметра функции, должны быть лексемой для лексемы, идентичной во всех объявлениях и переобъявлениях. |
3-9-2 | Определения типов, которые указывают на размер и со знаком, должны использоваться вместо основных числовых типов. |
3-9-3 | Базовые битные представления значений с плавающей точкой не должны использоваться. |
Стандартные преобразования
Правило | Описание |
---|---|
4-5-1 | Выражения с типом bool не должны использоваться в качестве операндов к встроенным операторам кроме оператора присваивания =, логические операторы &&, ||!, операторы равенства == и! =, унарное & оператор и условный оператор. |
4-5-2 | Выражения с перечислением типа не должны использоваться в качестве операндов к созданному - в операторах кроме нижнего оператора [], оператор присваивания =, операторы равенства == и! =, унарное & оператор и операторы отношения <<=>,> =. |
4-5-3 | Выражения с типом (простой) char и wchar_t не должны использоваться в качестве операндов к встроенным операторам кроме оператора присваивания =, операторы равенства == и! =, и унарное & оператор. |
Выражения
Правило | Описание |
---|---|
5-0-1 | Значение выражения должно быть тем же самым согласно любому порядку оценки, которую разрешает стандарт. |
5-0-2 | Ограниченная зависимость должна быть помещена в правила приоритета оператора C++ в выражениях. |
5-0-3 | cvalue выражение не должно быть неявно преобразовано в различный базовый тип. |
5-0-4 | Неявное интегральное преобразование не должно изменять со знаком из базового типа. |
5-0-5 | Не должно быть никаких неявных интегральных плаванием преобразований. |
5-0-6 | Неявное интегральное или преобразование с плавающей точкой не должно уменьшать размер базового типа. |
5-0-7 | Не должно быть никаких явных интегральных плаванием преобразований cvalue выражения. |
5-0-8 | Явное интегральное или преобразование с плавающей точкой не должно увеличивать размер базового типа cvalue выражения. |
5-0-9 | Явное интегральное преобразование не должно изменять со знаком из базового типа cvalue выражения. |
5-0-10 | Если побитовые операторы ~ и <<будут применены к операнду с базовым типом символьного или короткого целого без знака без знака, результат должен быть сразу брошен к базовому типу операнда. |
5-0-11 | Простой символьный тип должен только использоваться для устройства хранения данных и использования символьных значений. |
5-0-12 | символ со знаком и символьный тип без знака должны только использоваться для устройства хранения данных и использования числовых значений. |
5-0-13 | Условие оператора "if" и условие оператора цикла должны иметь тип bool. |
5-0-14 | Первый операнд условного оператора должен иметь тип bool. |
5-0-15 | Индексация массива должна быть единственной формой адресной арифметики с указателями. |
5-0-18 | >,> =, <<= не буду применен к объектам типа указателя, кроме того, где они указывают на тот же массив. |
5-0-19 | Объявление объектов должно содержать не больше, чем два уровня косвенности указателя. |
5-0-20 | Непостоянные операнды к бинарному побитовому оператору должны иметь тот же базовый тип. |
5-0-21 | Побитовые операторы должны только быть применены к операндам базового типа без знака. |
5-2-1 | Каждый операнд логического && или || должен быть постфиксом - выражение. |
5-2-2 | Указатель на виртуальный базовый класс должен только быть брошен к указателю на производный класс посредством dynamic_cast. |
5-2-3 | Броски от базового класса до производного класса не должны быть выполнены на полиморфных типах. |
5-2-4 | Броски C-стиля (кроме пустых бросков) и функциональных бросков обозначения (кроме вызовов явного конструктора) не должны использоваться. |
5-2-5 | Бросок не должен удалять const или энергозависимую проверку от типа указателя или ссылки. |
5-2-6 | Бросок не должен преобразовывать указатель на функцию ни к какому другому типу указателя, включая указатель на функциональный тип. |
5-2-7 | Объект с типом указателя не должен быть преобразован в несвязанный тип указателя, ни один прямо или косвенно. |
5-2-8 | Объект с целочисленным типом или указателем, чтобы освободить тип не должен быть преобразован в объект с типом указателя. |
5-2-9 | Бросок не должен преобразовывать тип указателя в целочисленный тип. |
5-2-10 | Шаг (++) и декремент (-) операторы не должен быть смешан с другими операторами в выражении. |
5-2-11 | Оператор запятой, && оператор и || оператор не должен быть перегружен. |
5-2-12 | Идентификатор с типом массива, переданным как аргумент функции, не должен затухать к указателю. |
5-3-1 | Каждый операнд! оператор, логический && или логическое || операторы должны иметь тип bool. |
5-3-2 | Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака. |
5-3-3 | Унарное & оператор не должны быть перегружены. |
5-3-4 | Оценка операнда к sizeof оператору не должна содержать побочные эффекты. |
5-8-1 | Правый операнд оператора сдвига должен находиться между нулем и меньше, чем ширина в битах базового типа левого операнда. |
5-14-1 | Правый операнд логического && или || оператор не должен содержать побочные эффекты. |
5-18-1 | Оператор запятой не должен использоваться. |
5-19-1 | Оценка постоянных выражений беззнаковых целых чисел не должна вести, чтобы повториться. |
Операторы
Правило | Описание |
---|---|
6-2-1 | Операторы присваивания не должны использоваться в подвыражениях. |
6-2-2 | Выражения с плавающей точкой не должны быть прямо или косвенно протестированы на равенство или неравенство. |
6-2-3 | Перед предварительной обработкой пустой оператор должен только произойти на строке отдельно; это может сопровождаться комментарием, при условии, что первый символ после пустого оператора является белым - пробел. |
6-3-1 | Оператор, формирующий тело переключателя, в то время как, делает..., в то время как или для оператора будет составной оператор. |
6-4-1 | Если (условие) создают, буду сопровождаться составным оператором. Еще ключевое слово должно сопровождаться или составным оператором или другим оператором if. |
6-4-2 | Все, если... еще, если построения должны быть отключены с выражением else. |
6-4-3 | Оператор switch должен быть правильно построенным оператором switch. |
6-4-4 | Метка переключателя должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом оператора switch. |
6-4-5 | Безусловный бросок или оператор завершения должны отключить каждый не - пустой пункт переключателя. |
6-4-6 | Итоговый пункт оператора switch должен быть пунктом по умолчанию. |
6-4-7 | Условие оператора switch не должно иметь типа bool. |
6-4-8 | Каждый оператор switch должен иметь по крайней мере один пункт случая. |
6-5-1 | Цикл for должен содержать один счетчик цикла, который не должен иметь типа с плавающей точкой. |
6-5-2 | Если счетчик цикла не будет изменен - или ++, то в условии счетчик цикла должен только использоваться в качестве операнда к <=, <> или> =. |
6-5-3 | Счетчик цикла не должен быть изменен в условии или операторе. |
6-5-4 | Счетчик цикла должен быть изменен одним из: - ++, - =n, или + =n; где n остается постоянным на время цикла. |
6-5-5 | Контрольная переменная цикла кроме счетчика цикла не должна быть изменена в условии или выражении. |
6-5-6 | Контрольная переменная цикла кроме счетчика цикла, который изменяется в операторе, должна иметь тип bool. |
6-6-1 | Любая метка, на которую ссылается оператор перехода, должна быть объявлена в том же блоке, или в блоке, заключающем оператор перехода. |
6-6-2 | Оператор перехода должен перейти к метке, объявленной позже в том же теле функции. |
6-6-3 | Оператор continue должен только использоваться в правильно построенном цикле for. |
6-6-4 | Для любого оператора цикла должен быть не больше, чем один оператор завершения, или оператор перехода использовал завершение цикла for. |
6-6-5 | Функция должна иметь одну точку выхода в конце функции. |
Объявления
Правило | Описание |
---|---|
7-3-1 | Глобальное пространство имен должно только содержать основные, объявления пространства имен и экстерна "C" объявления. |
7-3-2 | Основной идентификатор не должен использоваться для функции кроме глобального функционального основного. |
7-3-3 | В заголовочных файлах не должно быть никаких пространств имен без имени. |
7-3-4 | директивы использования не должны использоваться. |
7-3-5 | Многократные объявления для идентификатора в том же пространстве имен не должны колебаться между объявлением использования для того идентификатора. |
7-3-6 | директивы использования и объявления использования (исключая осциллограф класса или функциональные объявления использования осциллографа) не должны использоваться в заголовочных файлах. |
7-4-2 | Ассемблерные инструкции должны только быть введены с помощью asm объявления. |
7-4-3 | Ассемблер должен инкапсулироваться и изолироваться. |
Операторы объявления
Правило | Описание |
---|---|
8-0-1 | Init-declarator-list или членский список оператора объявления должны состоять из одного init-оператора-объявления или членского оператора объявления соответственно. |
8-3-1 | Параметры в переопределяющей виртуальной функции должны или использовать те же параметры по умолчанию в качестве функции, которую они заменяют или иначе не должны задавать параметры по умолчанию. |
8-4-1 | Функции не должны быть заданы с помощью обозначения замещающего знака. |
8-4-2 | Идентификаторы, используемые для параметров в переобъявлении функции, должны быть идентичны тем в объявлении. |
8-4-3 | Все выходные пути от функции с не - пустой тип возврата должны иметь явный оператор возврата с выражением. |
8-4-4 | Функциональный идентификатор должен или использоваться, чтобы вызвать функцию, или этим нужно предшествовать &. |
8-5-2 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в не - нулевая инициализация массивов и структур. |
8-5-3 | В списке перечислителей = построение не должно использоваться, чтобы явным образом инициализировать участников кроме первого, если все элементы не будут явным образом инициализированы. |
Классы
Правило | Описание |
---|---|
9-3-1 | функции членства const не должны возвращать указатели неconst или ссылки на данные класса. |
9-3-2 | Функции членства не должны возвращать указатели неconst на данные класса. |
9-5-1 | Объединения не должны использоваться. |
9-6-2 | Битовые поля должны быть или типом bool или явным образом целочисленным типом со знаком или без знака. |
9-6-3 | Битовые поля не должны иметь перечислимого типа. |
9-6-4 | Названные битовые поля с типом целого числа со знаком должны иметь длину больше чем одного бита. |
Производные классы
Правило | Описание |
---|---|
10-1-1 | Классы не должны быть выведены от виртуальных основ. |
10-1-2 | Базовый класс должен только быть объявлен виртуальный, если он будет использоваться в ромбовидной иерархии. |
10-1-3 | Доступный базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии. |
10-2-1 | Все доступные имена сущности в иерархии наследования кратного должны быть уникальными. |
10-3-1 | Должно быть не больше, чем одно определение каждой виртуальной функции на каждом пути через иерархию наследования. |
10-3-2 | Каждая переопределяющая виртуальная функция должна быть объявлена с виртуальным ключевым словом. |
10-3-3 | Виртуальная функция должна только быть заменена чистой виртуальной функцией, если она будет самостоятельно объявлена как чистая виртуальная. |
Членское управление доступом
Правило | Описание |
---|---|
11-0-1 | Членские данные в не - типы классов POD должны быть частными. |
Специальные функции членства
Правило | Описание |
---|---|
12-1-1 | Динамический тип объекта не должен использоваться от тела его конструктора или деструктора. |
12-1-2 | Все конструкторы класса должны явным образом вызвать конструктора для всех его мгновенных базовых классов и всех виртуальных базовых классов. |
12-1-3 | Все конструкторы, которые являются вызываемыми с отдельным аргументом фундаментального типа, должны быть объявлены явные. |
12-8-1 | Конструктор копии должен только инициализировать ее базовые классы и не - статические члены класса, которого это - член. |
12-8-2 | Оператор присваивания копии должен быть объявлен защищенный или частный в абстрактном классе. |
Шаблоны
Правило | Описание |
---|---|
14-5-2 | Конструктор копии должен быть объявлен, когда будет конструктор шаблона с одним параметром, который является типичным параметром. |
14-5-3 | Оператор присваивания копии должен быть объявлен, когда будет оператор присваивания шаблона с параметром, который является типичным параметром. |
14-6-1 | В шаблоне класса с зависимой основой любое имя, которое может быть найдено в той зависимой основе, должно быть отнесено в использование квалифицированного ID или этого->. |
14-6-2 | Функция, выбранная разрешением перегрузки, должна решить к функции, объявленной ранее в модуле перевода. |
14-7-3 | Все частичные и явные специализации для шаблона должны быть объявлены в том же файле как объявление их первичного шаблона. |
14-8-1 | Шаблоны перегруженной функции не должны быть явным образом специализированы. |
14-8-2 | Жизнеспособный функциональный набор для вызова функции не должен или содержать функциональные специализации, или только содержать функциональные специализации. |
Обработка исключений
Правило | Описание |
---|---|
15-0-2 | Объект исключения не должен иметь типа указателя. |
15-0-3 | Управление не должно быть передано в попытку или блок выгоды с помощью goto или оператора switch. |
15-1-2 | NULL не должен быть выдан явным образом. |
15-1-3 | Пустой бросок (бросок;) буду только использоваться в составном операторе обработчика выгоды. |
15-3-2 | Должен быть по крайней мере один обработчик исключений, чтобы отловить все в противном случае необработанные исключения |
15-3-3 | Обработчики реализации функционального блока попытки конструктора класса или деструктора не должны ссылаться на нестатических участников от этого класса или его основ. |
15-3-5 | Исключение типа класса должно всегда отлавливаться ссылкой. |
15-3-6 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки для производного класса, и некоторые или все его основы, обработчики должны быть упорядочены наиболее выведенные базовому классу. |
15-3-7 | Где несколько обработчиков обеспечиваются в одном операторе try-catch или функциональном блоке попытки, любой замещающий знак (вместилище), обработчик должен произойти в последний раз. |
15-5-1 | Деструктор класса не должен выходить за исключением. |
15-5-2 | Где объявление функции включает спецификацию исключения, функция должна только быть способна к выдаванию исключения обозначенного типа (типов). |
Предварительная обработка директив
Правило | Описание |
---|---|
16-0-1 | Директивам #include в файле должны только предшествовать другие директивы препроцессору или комментарии. |
16-0-2 | Макросы должны только быть #define 'd или #undef 'd в глобальном пространстве имен. |
16-0-3 | #undef не должен использоваться. |
16-0-4 | Подобные функции макросы не должны быть заданы. |
16-0-5 | Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив. |
16-0-6 | В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда # или ##. |
16-0-7 | Неопределенные макро-идентификаторы не должны использоваться в #if или #elif директивах препроцессору, за исключением операндов к заданному оператору. |
16-0-8 | Если # лексема появится как первая лексема на строке, то это должно сразу сопровождаться лексемой предварительной обработки. |
16-1-1 | Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм. |
16-1-2 | Весь #else, #elif и #endif директивы препроцессору должен находиться в том же файле как #if или #ifdef директива, с которой они связаны. |
16-2-1 | Препроцессор должен только использоваться для включения файла и включать защиту. |
16-2-2 | Макросы C++ должны только использоваться для: включайте защиту, введите спецификаторы или спецификаторы класса памяти. |
16-2-3 | Включайте защиту, буду обеспечен. |
16-2-4 | ', ",/* или//символы не должны происходить на имя заголовочного файла. |
16-2-5 | \символ не должен происходить на имя заголовочного файла. |
16-2-6 | #include директива должна сопровождаться или <имя файла> или последовательность "имени файла". |
16-3-1 | Должно быть самое большее одно вхождение # или ## операторов в одном макроопределении. |
16-3-2 | # и ## операторы не должны использоваться. |
16-6-1 | Все использование #pragma директивы должно быть зарегистрировано. |
17-0-1 | Зарезервированные идентификаторы, макросы и функции в стандартной библиотеке не должны быть заданы, переопределены или не определены. |
17-0-2 | Имена стандартных макросов библиотеки и объектов не должны быть снова использованы. |
17-0-5 | setjmp макрос и функция longjmp не должны использоваться. |
Вспомогательная библиотека языка
Правило | Описание |
---|---|
18-0-1 | Библиотекой C нельзя пользоваться. |
18-0-2 | Библиотечные функции atof, atoi и атолл от библиотеки <cstdlib> не должны использоваться. |
18-0-3 | Аварийное прекращение работы библиотечных функций, выход, getenv и система от библиотеки <cstdlib> не должны использоваться. |
18-0-4 | Функции обработки времени библиотеки <ctime> не должны использоваться. |
18-0-5 | Неограниченные функции библиотеки <cstring> не должны использоваться. |
18-2-1 | Макрос offsetof не должен использоваться. |
18-4-1 | Динамическое выделение памяти кучи не должно использоваться. |
18-7-1 | Погрузочно-разгрузочное оборудование сигнала <csignal> не должно использоваться. |
Диагностическая библиотека
Правило | Описание |
---|---|
19-3-1 | Ошибочный индикатор errno не должен использоваться. |
Библиотека ввода/вывода
Правило | Описание |
---|---|
27-0-1 | Потоковый ввод / выходная библиотека <cstdio> не должен использоваться. |