N. | Определение JSF® ++ | Polyspace® Implementation |
---|---|---|
1 | Любая функция (или метод) будет содержать не больше, чем 200 логических исходных строк кода (L-SLOCs). | Сообщение в файле отчета:
|
3 | Все функции должны иметь цикломатическое количество сложности 20 или меньше. | Сообщение в файле отчета:
|
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
8 | Весь код должен соответствовать ISO/IEC 14882:2002 (E) стандартный C++. | Сообщает сообщение ошибки компиляции |
9 | Только те символы, заданные в базовом наборе символов исходного кода C++, будут использоваться. | |
11 | Trigraphs не будет использоваться. | |
12 | Следующие диграфы не будут использоваться: <% , %> , <: , :> , %: , %:%: . | Сообщение в файле отчета: Следующий диграф не будет использоваться: Сообщает диграф. Если уровень правила будет установлен в предупреждение, диграф будет позволен, даже если это не будет поддержано в |
13 | Многобайтовые символы и широкие строковые литералы не будут использоваться. | Сообщите о L'c' , L"string" , и использование wchar_t . |
14 | Литеральные суффиксы должны использовать прописные а не строчные буквы. | |
15 | Условие должно быть сделано для времени выполнения, проверяющего (безопасное программирование). | Сделанный с регистрациями программного обеспечения. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
17 | Ошибочный индикатор | errno не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
18 | Макро- | offsetof не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
19 |
| setlocale и localeconv не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
20 |
| setjmp и longjmp не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
21 | Погрузочно-разгрузочное оборудование сигнала | signal и raise не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
22 | Библиотека | все стандартные функции <stdio.h> не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
23 | Библиотечные функции | atof , atoi и atol не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
24 | Библиотечные функции | abort выход getenv и system не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
25 | Функции обработки времени библиотеки | clock , difftime , mktime , asctime , ctime , gmtime , localtime и strftime не должен использоваться в качестве макроса или глобальной переменной с внешним "C" рычажным устройством. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
26 | Только следующие директивы препроцессору должны быть used: #ifndef Define , #endif Включение . | |
27 |
| Обнаруживает шаблоны #if !defined , #pragma once , #ifdef , и missing #define . |
28 | #ifndef и #endif директивы препроцессору будут только использоваться, как задано в Правиле 27 AV предотвратить несколько включений того же заголовочного файла. | Обнаруживает любое использование, которое не выполняет Правило 27 AV. Принятие 35/27 не нарушено, сообщает только о #ifndef . |
29 | #define директива препроцессору не должна использоваться, чтобы создать встроенные макросы. Подставляемые функции должны использоваться вместо этого. | Правило разделено в две части: определение макро-функции (29.def) и вызов макрофункции (29.use). Сообщения в файле отчета:
|
30 | #define директива препроцессору не должна использоваться, чтобы задать постоянные значения. Вместо этого const спецификатор должен быть применен к объявлениям переменной, чтобы задать постоянные значения. | Отчеты #define из простых констант. |
31 | #define директива препроцессору будет только использоваться в качестве части метода, чтобы предотвратить несколько включений того же заголовочного файла. | Обнаруживает использование #define это не используется, чтобы охранять для нескольких включение, принимая, что правила 35 и 27 не нарушены. |
32 | #include директива препроцессору будет только использоваться, чтобы включать заголовок (*.h) файлы. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
33 | #include директива должна использовать <filename.h> обозначение, чтобы включать заголовочные файлы. | |
35 | Заголовочный файл будет содержать механизм, который предотвращает несколько включений себя. | |
39 | Заголовочные файлы (*.h ) не будет содержать определения переменной неconst или функциональные определения. | Определения отчетов глобальных переменных / функционируют в заголовке. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
40 | Каждый файл реализации должен включать заголовочные файлы, которые исключительно задают подставляемые функции, типы и используемые шаблоны. | Отчеты, когда тип, шаблон или подставляемая функция заданы в исходном файле. Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
41 | Исходные линии будут сведены к продолжительности 120 символов или меньше. | |
42 | Каждый оператор выражения будет на отдельной линии. | Отчеты, когда два последовательных оператора выражения находятся на той же линии (если операторы не являются частью макроопределения). |
43 | Вкладок нужно избежать. | |
44 | Все добавления отступа будут по крайней мере двумя пробелами и будут сопоставимы в том же исходном файле. | Отчеты, когда добавление отступа оператора не является по крайней мере двумя пробелами больше, чем оператор, содержащий его. Не сообщает плохое добавление отступа между открытием фигурных скобок после того, если/еще,/в то время как, поскольку, и в то время как операторы. NB: в итоговом релизе это примет любое добавление отступа |
46 | Заданные пользователями идентификаторы (внутренний и внешний) не используют значение больше чем 64 символов. | |
47 | Идентификаторы не начнутся с символа подчеркивания '_ '. | |
48 | Идентификаторы не будут отличаться:
| Проверяемый независимо от осциллографа. Не проверяемый между макросами и другими идентификаторами. Сообщения в файле отчета:
|
50 | Первое слово имени класса, структуры, пространства имен, перечисления или типа создается с | Сообщения в файле отчета:
Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
51 | Все буквы, содержавшиеся в функции и именах переменных, будут составлены полностью строчных букв. | Сообщения в файле отчета:
|
52 | Идентификаторы для постоянного и значений перечислителя должны быть нижним регистром. | Сообщения в файле отчета:
|
53 | Заголовочные файлы будут всегда иметь расширение файла ".h ". |
|
53.1 | Следующие последовательности символов не должны появляться на имена заголовочного файла: ' , \ , /* , // , или " . | |
54 | Файлы реализации будут всегда иметь расширение файла ".cpp". | Не чувствительный к регистру, если вы устанавливаете опцию -dos . |
57 | Общественность, защищенные, и частные разделы класса будут объявлены в том порядке. | |
58 | При объявлении и определении функций больше чем двумя параметрами, ведущая круглая скобка и первый аргумент будут записаны на той же линии как имя функции. Каждый дополнительный аргумент будет записан на отдельной линии (с закрывающей скобкой непосредственно после последнего аргумента). | Обнаруживает, что два параметра не находятся на той же линии, первый параметр должен быть на той же линии как имя функции. Не проверяет на закрывающую скобку. |
59 | Операторы, формирующие тело, если, еще если, еще, в то время как, делают..., в то время как или для оператора буду всегда заключаться в фигурные скобки, даже если фигурные скобки формируют пустой блок. | Сообщения в файле отчета:
|
60 | Фигурные скобки ("{} "), которые заключают блок, будет помещен в тот же столбец, на отдельных линиях непосредственно до и после блока. | Обнаруживает тот блок операторов, которым фигурные скобки должны быть в тех же столбцах. |
61 | Фигурные скобки ("{} "), которые заключают блок, не будет иметь ничего иного на линии кроме комментариев. | |
62 | Разыменовать оператор '*' и операция вычисления адреса ‘&’ будет непосредственно соединен со спецификатором типа. | Отчеты, когда существует пробел между типом и "*" "&" для переменных, параметров и полевого объявления. |
63 | Пробелы не будут использоваться вокруг'.' или ‘->’, ни между унарными операторами и операндами. | Отчеты, когда следующие символы непосредственно не соединяются с пробелом:
Обратите внимание на то, что о нарушении сообщат для“.” используемого в определении плавающем/двойном. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
67 | Общедоступные и защищенные данные должны только использоваться в структурах - не классы. | |
68 | Ненужные неявно сгенерированные функции членства должны быть явным образом запрещены. | Отчеты, когда конструктор по умолчанию, оператор присваивания, конструктор копии или деструктор не объявляются. |
71.1 | Виртуальные функции класса не должны быть вызваны от его деструктора или любого из его конструкторов. | Отчеты, когда конструктор или деструктор непосредственно вызывают виртуальную функцию. |
74 | Инициализация нестатических членов класса будет выполняться через список инициализаций члена, а не через присвоение в теле конструктора. | Все данные должны быть инициализированы в списке инициализаций за исключением массива. Не сообщает, что присвоение существует в Сообщение в файле отчета: Инициализация нестатических членов класса " |
75 | Члены списка инициализаций должны быть перечислены в порядке, в котором они объявляются в классе. | |
76 | Конструктор копии и оператор присваивания должны быть объявлены для классов, которые содержат указатели на элементы данных или нетривиальные деструкторы. | Сообщения в файле отчета:
Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
77.1 | Определение функции членства не должно содержать параметры по умолчанию, которые производят подпись, идентичную тому из неявно объявленного конструктора копии для соответствующего класса/структуры. | Не сообщает, когда явный конструктор копии существует. |
78 | Все базовые классы с виртуальной функцией должны задать виртуальный деструктор. | |
79 | Все средства, полученные классом, должны быть высвобождены деструктором класса. | Отчеты, когда количество “новых”, названных в конструкторе, больше количества, “удаляют” названный в его деструкторе.
ПримечаниеНарушение повышено, даже если “новый” выполнен “если/еще”.
|
81 | Оператор присваивания должен обработать самоприсвоение правильно | Отчеты, когда тело присвоения копии не начинается “ Нарушение не повышено если пустой Нарушение повышено когда |
82 | Оператор присваивания должен возвратить ссылку на *this . | Следующие операторы должны возвратить
Не сообщает, когда никакие не возвращаются, существует. Никакое специальное сообщение, если тип не соответствует. Сообщения в файле отчета:
|
83 | Оператор присваивания должен присвоить все элементы данных и основы, которые влияют на инвариант класса (элемент данных, представляющий кэш, например, не должен был бы быть скопирован). | Отчеты, когда присвоение копии не присваивает все элементы данных. В производном классе это также сообщает, когда присвоение копии не вызывает наследованные присвоения копии. |
88 | Множественное наследование должно только быть позволено в следующей ограниченной форме: n интерфейсы плюс m частные реализации, плюс самое большее одна защищенная реализация. | Сообщения в файле отчета:
|
88.1 | Виртуальная основа с сохранением информации должна быть явным образом объявлена в каждом производном классе, который получает доступ к ней. | |
89 | Базовый класс не должен быть и виртуальным и невиртуальным в той же иерархии. | |
94 | Наследованная невиртуальная функция не должна быть переопределена в производном классе. | Не сообщает для деструктора. Сообщение в файле отчета: Наследованный невиртуальный функциональный |
95 | Наследованный параметр по умолчанию никогда не должен переопределяться. | |
96 | Массивы не должны быть обработаны полиморфно. | Адресная арифметика с указателями отчетов и массив как доступ по выражениям, резкий тип которых используется в качестве базового класса. |
97 | Массивы не должны использоваться в интерфейсе. | Только предотвратить массив к затуханию указателя. Не проверенные закрытые методы |
97.1 | Никакой операнд оператора равенства (== или != ) будет указатель на виртуальную функцию членства. | Отчеты == и != на указателе на функцию членства полиморфных классов (не может определить статически, если это является виртуальным или не), кроме тех случаев, когда один аргумент является пустой константой. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
98 | Каждое нелокальное имя, кроме main() , должен быть помещен в некоторое пространство имен. | Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
99 | Пространства имен не будут вложены больше чем два уровня глубоко. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
104 | Специализация шаблона должна быть объявлена перед ее использованием. | Сообщает фактическое сообщение ошибки компиляции. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
107 | Функции должны всегда объявляться в осциллографе файла. | |
108 | Функции с переменными количествами аргументов не должны использоваться. | |
109 | Функциональное определение не должно быть помещено в спецификацию класса, если функция не предназначается, чтобы быть встроенной. | Отчеты, когда "встроенный" не находятся в определении функции членства в определении класса. |
110 | Функции больше чем с 7 аргументами не будут использоваться. | |
111 | Функция не должна возвращать указатель или ссылку на нестатический локальный объект. | Обнаруживаются простые случаи без эффекта псевдонима. |
113 | Функции будут иметь одну точку выхода. | Отчеты сначала возвращаются, или однажды на функцию. |
114 | Все точки выхода возвращающих значение функций должны быть через операторы возврата. | |
116 | Небольшие, конкретные аргументы типа (два или три слова в размере) должны быть переданы значением, если изменения, внесенные в формальные параметры, не должны быть отражены в функции вызова. | Сообщите о постоянных ссылках параметров с sizeof <= 2 * sizeof(int) . Не сообщает для конструктора копии. |
119 | Функции не должны вызывать себя, ни один прямо или косвенно (т.е. рекурсия не должна быть позволена). | Средство проверки сообщает о каждой функции, которая вызывает себя, прямо или косвенно. Даже если несколько функций вовлечены в один цикл рекурсии, о каждой функции индивидуально сообщают. Можно вычислить общее количество циклов рекурсии с помощью метрики сложности кода |
121 | Только функции с 1 или 2 операторами должны быть рассмотрены кандидатами на подставляемые функции. | Подставляемые функции отчетов больше чем с 2 операторами. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
126 | Только допустимый C++ разрабатывает комментарии (// ) буду использоваться. | |
133 | Каждый исходный файл будет зарегистрирован с вводным комментарием, который предоставляет информацию об имени файла, его содержимом и любой требуемой от программы информации (например, легальные операторы, информация об авторском праве, и т.д.). | Отчеты, когда файл не начинается с двух строк с комментариями. Примечание: Это правило не может быть аннотировано в исходном коде. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
135 | Идентификаторы во внутреннем осциллографе не должны использовать то же имя в качестве идентификатора во внешнем осциллографе, и поэтому скрыть тот идентификатор. | Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
136 | Объявления должны быть в самом маленьком выполнимом осциллографе. | Отчеты, когда:
Примечание
|
137 | Все объявления в осциллографе файла должны быть статическими, если это возможно. | |
138 | Идентификаторы не должны одновременно иметь и внутреннего и внешнего рычажного устройства в том же модуле перевода. | |
139 | Внешние объекты не будут объявлены больше чем в одном файле. | Отчеты все двойные объявления в модуле перевода. Отчеты, когда локализация объявления не является тем же самым во всех модулях перевода. |
140 | Спецификатор класса памяти регистра не должен использоваться. | |
141 | Класс, структура или перечисление не будут объявлены в определении его типа. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
142 | Все переменные должны быть инициализированы перед использованием. | Сделанный с Неинициализированной переменной регистрируется в программном обеспечении. |
144 | Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами. | Это покрывает частичную инициализацию. |
145 | В списке перечислителей, '= 'построение не должно использоваться, чтобы явным образом инициализировать члены кроме первого, если все элементы не будут явным образом инициализированы. | Генерирует один отчет для списка перечислителей. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
147 | Базовые битные представления чисел с плавающей точкой не должны использоваться ни в каком случае программистом. | Отчеты относительно бросков с указателями плавающими (кроме с void* ). |
148 | Перечисляемые типы должны использоваться вместо целочисленных типов (и константы), чтобы выбрать из ограниченного ряда выбора. | Отчеты, когда не перечисляемые типы используются в переключателях. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
149 | Восьмеричные константы (кроме нуля) не должны использоваться. | |
150 | Шестнадцатеричные константы будут представлены с помощью всех прописных букв. | |
151 | Числовые значения в коде не будут использоваться; символьные значения будут использоваться вместо этого. | Отчеты прямые числовые константы (кроме целочисленного/плавающего значения Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
151.1 | Строковый литерал не должен быть изменен. | Средство проверки правила отмечает присвоение строковых литералов к:
|
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
152 | Несколько объявлений переменной не должны быть позволены на той же линии. | Отчеты, когда два последовательных оператора объявления находятся на той же линии (если операторы не являются частью макроопределения). |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
153 | Объединения не должны использоваться. | |
154 | Битовые поля должны иметь явным образом интеграл без знака или перечисляемые типы только. | |
156 | Все члены структуры (или класс) нужно назвать и нужно только получить доступ через их имена. | Сообщают битовые поля без имени (поля без имени не позволены). |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
157 | Правый операнд && или || оператор не должен содержать побочные эффекты. | Принимает, что правило 159 не нарушено. Сообщения в файле отчета:
|
158 | Операнды логического | Сообщения в файле отчета:
Исключение для: |
159 | Операторы | Сообщения в файле отчета:
|
160 | Выражение присваивания должно использоваться только в качестве выражения в операторе выражения. | Только простое присвоение, не += , ++ , и т.д. |
162 | Подписанные и значения без знака не должны быть смешаны в операциях сравнения или арифметике. | |
163 | Арифметика без знака не должна использоваться. | |
164 | Правый операнд оператора сдвига должен находиться между нулем и меньше, чем ширина в битах левого операнда (включительно). | |
164.1 | Левый операнд оператора сдвига вправо не должен иметь отрицательной величины. | Обнаруживает постоянный случай + . Найденный программным обеспечением для динамических случаев. |
165 | Оператор унарный минус не должен быть применен к выражению без знака. | |
166 | sizeof оператор не будет использоваться по выражениям, которые содержат побочные эффекты. | |
168 | Оператор запятой не должен использоваться. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
169 | Указателей на указатели нужно избежать, если это возможно. | Сообщают указатели второго уровня, за исключением аргументов основного. |
170 | Больше чем 2 уровня косвенности указателя не должны использоваться. | Только отчеты относительно переменных/параметров. |
171 | Операторы отношения не должны быть применены к типам указателей кроме того, где оба операнда имеют тот же тип и указывают на:
| Отчеты, когда оператор отношения используются на типах указателей (проигнорированные броски). |
173 | Адрес объекта с автоматическим хранением не должен быть присвоен объекту, который сохраняется после того, как объект прекратил существование. | |
174 | Нулевой указатель не должен быть разыменован. | Сделанный с регистрациями программного обеспечения. |
175 | Указатель не должен сравниваться с NULL или быть присвоенным NULL ; используйте плоскость 0 вместо этого. | Использование отчетов NULL макрос в контекстах указателя. |
176 |
| Отчеты non-typedef указатели функции или указатели на функции членства для типов переменных, полей, параметров. Возвращает тип функции, броска и спецификации исключения. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
177 | Нужно избежать пользовательских функций преобразования. | Сообщают определяемая пользователем функция преобразования, неявный конструктор одним параметром или значением по умолчанию для других (даже неопределенные единицы). Не сообщает конструктор копии. Дополнительное сообщение для случая конструктора: Этот конструктор должен быть отмечен как "явный". |
178 | Вниз кастинг (бросающий от основы до производного класса) должен только быть позволен через один из следующего механизма:
| Отчеты, явные вниз кастинг, dynamic_cast включенный. (Скороговорка посетителя не имеет особого случая.) |
179 | Указатель на виртуальный базовый класс не должен быть преобразован в указатель на производный класс. | Отчеты это конкретное вниз бросок. Позволяет dynamic_cast. |
180 | Неявные преобразования, которые могут привести к потере информации, не должны использоваться. | Сообщают следующие неявные составы исполнителей:
Не сообщает для броска Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
181 | Избыточные явные броски не будут использоваться. | Отчеты бесполезный бросок: cast T to T . Броски к эквивалентному typedefs также сообщаются. |
182 | Преобразование типа от любого типа до или от указателей не должно использоваться. | Не сообщает, когда Правило 181 применяется. |
184 | Числа с плавающей точкой не должны быть преобразованы в целые числа, если такое преобразование не будет заданным алгоритмическим требованием или необходимо для аппаратного интерфейса. | Отчеты float->int преобразования. Не сообщают неявные единицы. |
185 | Броски стиля C++ (const_cast , reinterpret_cast , и static_cast ) буду использоваться вместо традиционных бросков C-стиля. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
186 | Не должно быть никакого недостижимого кода. | Сделанный с серыми регистрациями программного обеспечения. Средство поиска ошибки и Программа автоматического доказательства Кода проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам. |
187 | Все непустые операторы должны потенциально иметь побочный эффект. | |
188 | Метки не будут использоваться, кроме операторов switch. | |
189 | goto оператор не должен использоваться. | |
190 | continue оператор не должен использоваться. | |
191 | break оператор не должен использоваться (кроме отключить случаи оператора switch). | |
192 | Весь if , else if построения будут содержать любого итоговый else пункт или комментарий, указывающий, почему итоговый else пункт не необходим. | else if должен содержать else пункт. |
193 | Каждый непустой case пункт в операторе switch должен быть отключен с break оператор. | |
194 | Весь switch операторы, которые не намереваются протестировать на каждую перечислимую величину, должны содержать итоговый default пункт. | Отчеты только для пропавших без вести default . |
195 | switch выражение не будет представлять булево значение. | |
196 | Каждый switch оператор будет иметь по крайней мере два случая и потенциальный default . | |
197 | Переменные с плавающей точкой не должны использоваться в качестве счетчиков цикла. | Принимает 1 параметр цикла. |
198 | Выражение инициализации в for цикл не выполнит действий кроме инициализировать значение одного for параметр цикла. | Отчеты, если loop параметр не может быть определен. Принимает, что Правило 200 не нарушено. loop variable параметр принят, чтобы быть переменной. |
199 | Инкрементное выражение в for цикл не выполнит действия кроме изменить один параметр цикла в следующее значение для цикла. | Принимает 1 параметр цикла (Правило 198), с не тип класса. Правило 200 не должно быть нарушено для этого правила, о котором сообщат. |
200 | Пустой указатель инициализирует или постепенно увеличивает выражения в for циклы не будут использоваться; while цикл будет использоваться вместо этого. | |
201 | Числовые переменные, используемые в цикле for в подсчете итерации, не должны быть изменены в теле цикла. | Принимает 1 параметр цикла (правило 198 AV), и никакие записи псевдонима. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
202 | Переменные с плавающей точкой не должны быть протестированы на точное равенство или неравенство. | Отчеты только прямое равенство/неравенство. Проверяйте сделанный на все выражения. |
203 | Оценка выражений не должна вести, чтобы переполниться/недостаточно заполнить. | Сделанный с переполнением регистрируется в программном обеспечении. |
204 | Одна операция с побочными эффектами должна только использоваться в следующих контекстах:
| Отчеты, когда:
|
204.1 | Значение выражения должно быть тем же самым согласно любому порядку оценки, которую разрешает стандарт. | Отчеты, когда:
ПримечаниеОперации чтения-записи такой как ++, только рассматриваются как запись. |
205 | Энергозависимое ключевое слово не должно использоваться если непосредственно взаимодействие через интерфейс с оборудованием. | Отчеты, если энергозависимое ключевое слово используется. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
206 | Выделение/освобождение из/в свободное хранилище (куча) не должно происходить после инициализации. | Отчеты вызывают к библиотечным функциям C: malloc / calloc / realloc / free и весь new/delete операторы в функциях или методах. |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
208 | Исключения C++ не должны использоваться. | Отчеты try , catch , throw spec , и throw . |
N. | JSF ++ определение | Реализация Polyspace |
---|---|---|
209 | Основные типы | Только позволяет использование основных типов через прямой typedefs . |
213 | Никакая зависимость не должна быть помещена в правила приоритета оператора C++, ниже арифметических операторов, в выражениях. | Отчеты, когда бинарная операция имеет один операнд, который не заключается в скобки и является операцией с нижним уровнем приоритета. Отчеты поразрядно и операторы сдвигов, которые используются без аргументов бинарной операции и круглой скобки. |
215 | Адресная арифметика с указателями не будет использоваться. | Reports: Позволяет |
N. | JSF ++ определение |
---|---|
2 | Не должно быть никакого кода самоизменения. |
N. | JSF ++ определение |
---|---|
4 | Повреждаться "должно" управлять, следующее одобрение должно быть получено разработчиком:
|
5 | Повредить “желание” или "должно" управлять, следующие одобрения должны быть получены разработчиком:
|
6 | Каждое отклонение от "должно" управлять, буду зарегистрирован в файл, который содержит отклонение. Отклонения от этого правила не должны быть позволены, Правило 5 AV, несмотря на это. |
7 | Одобрение не будет требоваться для отклонения от или постановит, что это выполняет исключение, заданное тем правилом. |
N. | JSF ++ определение |
---|---|
10 | Значения типов символов будут ограничены заданным и зарегистрированным подмножеством ISO 10646 1. |
N. | JSF ++ определение |
---|---|
16 | Только DO - 178B уровень A [15] библиотеки SEAL 1 могущего быть удостоверенным или C/C++ должен использоваться с критическим по отношению к безопасности (т.е. SEAL 1) код. |
N. | JSF ++ определение |
---|---|
34 | Заголовочные файлы должны содержать логически связанные объявления только. |
36 | Зависимости от компиляции должны быть минимизированы, если это возможно. |
37 | Заголовок (включает) файлы, должен включать только те заголовочные файлы, которые требуются для них успешно скомпилировать. Файлы, которые только используются связанным .cpp файлом, должны быть помещены в .cpp файл — не.h файл. |
38 | Объявления классов, к которым только получают доступ через указатели (*) или ссылки (&) должны предоставить прямые заголовки, которые содержат только предописания. |
N. | JSF ++ определение |
---|---|
45 | Все слова в идентификаторе будут разделены ‘_’ символ. |
49 | Все акронимы в идентификаторе будут состоять из прописных букв. |
55 | Имя заголовочного файла должно отразить логическую сущность, для которой оно обеспечивает объявления. |
56 | Имя файла реализации должно отразить логическую сущность, для которой оно предоставляет определения, и имейте “.cpp” расширение (это имя обычно будет идентично заголовочному файлу, который обеспечивает соответствующие объявления.) Время от времени больше чем один .cpp файл для данной логической сущности будет требоваться. В этих случаях суффикс должен быть добавлен, чтобы отразить логическое дифференцирование. |
N. | JSF ++ определение |
---|---|
64 | Интерфейс класса должен быть завершен и минимален. |
65 | Структура должна использоваться, чтобы смоделировать сущность, которая не требует инварианта. |
66 | Класс должен использоваться, чтобы смоделировать сущность, которая обеспечивает инвариант. |
69 | Функция членства, которая не влияет на состояние объекта (его переменные экземпляра) будет объявлена const. Функции членства должны быть const по умолчанию. Только то, когда существует ясная, явная причина, должно модификатор const на функциях членства быть не использованным. |
70 | Класс будет иметь друзей только, когда функция или объект будут требовать доступа к частным элементам класса, но будут не мочь быть членом класса по причинам КПД или логическому. |
70.1 | Объект не должен неправильно использоваться, прежде чем его время жизни начинается или после того, как его время жизни заканчивается. |
71 | Вызовы внешне видимой операции объекта, кроме его конструкторов, не должны быть позволены, пока объект не был полностью инициализирован. |
72 | Инвариант для класса должен быть:
|
73 | Ненужные конструкторы по умолчанию не должны быть заданы. |
77 | Конструктор копии должен скопировать все элементы данных и основы, которые влияют на инвариант класса (элемент данных, представляющий кэш, например, не должен был бы быть скопирован). |
80 | Копия по умолчанию и операторы присваивания будут использоваться в классах, когда те операторы предложат разумную семантику. |
84 | Перегрузка операторов будет использоваться экономно и обычным способом. |
85 | Когда два оператора являются противоположностями (такой как == и! =), оба будут заданы, и каждый будет задан в терминах другого. |
86 | Конкретные типы должны использоваться, чтобы представлять простые независимые концепции. |
87 | Иерархии должны быть основаны на абстрактных классах. |
90 | В большой степени используемые интерфейсы должны быть минимальными, общими и абстрактными. |
91 | Общедоступное наследование будет использоваться, чтобы реализовать отношения “isa”. |
92 | Подтип (публично производные классы) будет соответствовать следующим инструкциям относительно всех классов, вовлеченных в полиморфное присвоение различных экземпляров подкласса к той же переменной или параметру во время выполнения системы:
Другими словами, методы подклассов должны ожидать меньше и поставить больше, чем методы базового класса, которые они заменяют. Это правило подразумевает, что подтипы будут соответствовать принципу замены Лисков. |
93 | “имеет -”, или “реализован в терминах” отношений, будет смоделирован через членство или непубличное наследование. |
N. | JSF ++ определение |
---|---|
100 | Элементы от пространства имен должны быть выбраны можно следующим образом:
|
N. | JSF ++ определение |
---|---|
101 | Шаблоны должны быть рассмотрены можно следующим образом:
|
102 | Тесты шаблона должны быть созданы, чтобы покрыть все фактические инстанцирования шаблона. |
103 | Ограничительные проверки должны быть применены к аргументам шаблона. |
105 | Зависимость определения шаблона от ее контекстов инстанцирования должна быть минимизирована. |
106 | Специализации для типов указателей должны быть сделаны, где это необходимо. |
N. | JSF ++ определение |
---|---|
112 | Функциональные возвращаемые значения не должны затенять владение ресурса. |
115 | Если функция возвратит информацию об ошибке, то та информация об ошибке будет протестирована. |
117 | Аргументы должны быть переданы ссылкой, если Нулевые значения не возможны:
|
118 | Аргументы должны быть переданы через указатели, если Нулевые значения возможны:
|
120 | Перегруженные операции или методы должны сформировать семейства, которые используют ту же семантику, совместно используют то же имя, имеют ту же цель, и которые дифференцируются формальными параметрами. |
122 | Тривиальное средство доступа и мутаторные функции должны быть встроены. |
123 | Количество средства доступа и мутаторных функций должно быть минимизировано. |
124 | Должны быть встроены тривиальные передающие функции. |
125 | Нужно избежать ненужных временных объектов. |
N. | JSF ++ определение |
---|---|
127 | Код, который не используется (прокомментированный), должен быть удален. Примечание: Это правило не может быть аннотировано в исходном коде. |
128 | Комментарии, что действия документа или источники (например, таблицы, фигуры, абзацы, и т.д.) за пределами зарегистрированного файла не будут позволены. |
129 | Комментарии в заголовочных файлах должны описать внешне видимое поведение функций или зарегистрированных классов. |
130 | Цель каждой линии исполняемого кода должна быть объяснена комментарием, несмотря на то, что один комментарий может описать больше чем одну строку кода. |
131 | Нужно постараться не утверждать в комментариях, что лучше утверждается в коде (т.е. просто не повторяйте то, что находится в коде). |
132 | Каждое объявление переменной, определение типа, перечислимая величина и элемент структуры будут прокомментированы. |
134 | Предположения (ограничения), сделанные функциями, должны быть зарегистрированы в преамбулу функции. |
N. | JSF ++ определение |
---|---|
143 | Переменные не будут введены, пока они не смогут быть инициализированы значимыми значениями. (См. также Правило 136 AV, Правило 142 AV и Правило 73 AV относительно области действия объявления, инициализация перед использованием и конструкторами по умолчанию соответственно.) |
N. | JSF ++ определение |
---|---|
146 | Реализации с плавающей точкой должны выполнить заданный стандарт с плавающей точкой. Стандарт, который будет использоваться, является Станд. ANSI®/IEEE® 754 [1]. |
N. | JSF ++ определение |
---|---|
155 | Битовые поля не будут использоваться, чтобы упаковать данные в слово для единственной цели оставить свободное место. |
N. | JSF ++ определение |
---|---|
167 | Реализация целочисленного деления в выбранном компиляторе должна быть определена, зарегистрирована и учтена. |
N. | JSF ++ определение |
---|---|
183 | Каждая возможная мера должна быть принята, чтобы избежать преобразования типа. |
N. | JSF ++ определение |
---|---|
204 | Одна операция с побочными эффектами должна только использоваться в следующих контекстах:
|
N. | JSF ++ определение |
---|---|
207 | Неинкапсулированных глобальных данных избегут. |
N. | JSF ++ определение |
---|---|
210 | Алгоритмы не должны делать предположения относительно того, как данные представлены в памяти (например, обратный порядок байтов по сравнению с прямым порядком байтов, подобъект базового класса, заказывающий в производных классах, нестатическом упорядоченном расположении элемента данных через спецификаторы доступа, и т.д.). |
210.1 | Алгоритмы не должны делать предположения относительно порядка выделения нестатических элементов данных разделенными спецификатором доступа. |
211 | Алгоритмы не должны принимать, что короткие замыкания, ints, longs, плавания, удваиваются или долго удваиваются, начинаются в конкретных адресах. |
212 | Потеряйте значимость или переполнитесь, функционирование не должно зависеться ни от каким специальным способом. |
214 | Предположение, что нелокальные статические объекты, в отдельных модулях перевода, инициализируются в специальном порядке, не должно быть сделано. |
N. | JSF ++ определение |
---|---|
216 | Программисты не должны пытаться преждевременно оптимизировать код. |
N. | JSF ++ определение |
---|---|
217 | Время компиляции и разовые ссылкой ошибки должны быть предпочтены по ошибкам времени выполнения. |
218 | Уровни предупреждения компилятора будут установлены в соответствии с политиками проекта. |
N. | JSF ++ определение |
---|---|
219 | Все тесты применились к интерфейсу базового класса, буду применен ко всем интерфейсам производного класса также. Если производный класс изложит более сильные постусловия/инварианты, то новыми постусловиями / инварианты нужно подставиться в тестах производного класса. |
220 | Алгоритмы структурного покрытия должны быть применены против сглаженных классов. |
221 | Структурное покрытие класса в иерархии наследования, содержащей виртуальные функции, должно включать тестирование каждого возможного разрешения для каждого набора идентичных полиморфных ссылок. |