N. | Определение JSF® ++ | Polyspace® Specification |
---|---|---|
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 , exit , getenv и system не должны использоваться в качестве макроса или глобальной переменной с внешней "C" связью. |
25 | Функции обработки времени библиотеки | clock , difftime , mktime , asctime , ctime , gmtime , localtime и strftime не должны использоваться в качестве макроса или глобальной переменной с внешней "C" связью. |
N. | JSF ++ определение | Спецификация Polyspace |
---|---|---|
26 | Только следующие директивы препроцессору должны быть used: #ifndef , #define , #endif , #include . | |
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 | Адресная арифметика с указателями не будет использоваться. |
Позволяет |
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 | Структурное покрытие класса в иерархии наследования, содержащей виртуальные функции, должно включать тестирование каждого возможного разрешения для каждого набора идентичных полиморфных ссылок. |