Кодирование подмножеств правила, проверенных рано в анализе

В начальной фазе компиляции анализа Polyspace® проверяет тех, которые кодируют правила, которые не требуют части обнаружения ошибки времени выполнения анализа. Если вы хотите только те проверяемые правила, можно выполнить намного более быстрый анализ.

Программное обеспечение обеспечивает два предопределенных подмножества правил, что оно проверяет ранее в анализ. Подмножества доступны с опциями Check MISRA C:2004 (-misra2), Check MISRA AC AGC (-misra-ac-agc), и Check MISRA C:2012 (-misra3).

АргументЦель
single-unit-rules

Проверяйте правила, которые применяются только к одному модулям перевода.

Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Bug Finder остановки после фазы компиляции.

system-decidable-rules

Проверяйте правила в single-unit-rules подмножество и некоторые правила, которые применяются к коллективному набору программных файлов. Дополнительные правила являются менее комплексными правилами, которые применяются в степени интеграции. Эти правила могут проверяться только в степени интеграции, потому что правила включают больше чем один модуль перевода.

Если вы обнаруживаете только кодирующие нарушения правила и выбираете это подмножество, анализ Bug Finder остановки после соединяющейся фазы.

См. также Проверку на Кодирование Нарушений Правила.

MISRA C:2004 и правила AGC AC MISRA

Программное обеспечение проверяет следующие правила рано в анализ. Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules подмножество обозначается звездочкой.

Среда

ПравилоОписание
1.1*

Весь код должен приспособить ISO® 9899:1990 "Языкам программирования - C", исправил и откорректированный ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995 и ISO/IEC 9899/COR2:1996.

Расширения языка

ПравилоОписание
2.1

Ассемблер должен инкапсулироваться и изолироваться.

2.2

Исходный код должен только использовать /* */ разработайте комментарии.

2.3

Последовательность символов /* не буду использоваться в рамках комментария.

Документация

ПравилоОписание
3.4

Все использование #pragma директива должна быть зарегистрирована и объяснена.

Наборы символов

ПравилоОписание
4.1

Только те escape-последовательности, которые заданы в стандарте ISO C, должны использоваться.

4.2

Trigraphs не должен использоваться.

Идентификаторы

ПравилоОписание
5.1*

Идентификаторы (внутренний и внешний) не должны использовать значение больше чем 31 символа.

5.2

Идентификаторы во внутреннем осциллографе не должны использовать то же имя в качестве идентификатора во внешнем осциллографе, и поэтому скрыть тот идентификатор.

5.3*

Имя определения типа должно быть уникальным идентификатором.

5.4*

Имя тега должно быть уникальным идентификатором.

5.5*

Никакой объектный или функциональный идентификатор со статической продолжительностью хранения не должен быть снова использован.

5.6*

Никакой идентификатор в одном пространстве имен не должен иметь то же написание как идентификатор в другом пространстве имен, за исключением имен члена профсоюза и структуры.

5.7*

Никакое имя идентификатора не должно быть снова использовано.

Типы

ПравилоОписание
6.1

Простой символьный тип должен использоваться только для устройства хранения данных и использования символьных значений.

6.2

Подписанный и символьный тип без знака должен использоваться только для устройства хранения данных и использования числовых значений.

6.3

typedefs, которые указывают, размер и со знаком должен использоваться вместо основных типов.

6.4

Битовые поля должны только быть заданы, чтобы иметь тип unsigned int или signed int.

6.5

Битовые поля типа signed int будет по крайней мере 2 бита длиной.

Константы

ПравилоОписание
7.1

Восьмеричные константы (кроме нуля) и восьмеричные escape-последовательности не должны использоваться.

Объявления и определения

ПравилоОписание
8.1

Функции должны иметь объявления прототипа, и прототип должен отобразиться в обоих функциональным определением и вызовом.

8.2

Каждый раз, когда объект или функция объявлены или заданы, ее тип должен быть явным образом утвержден.

8.3

Для каждого параметра функции тип, данный в объявлении и определении, должен быть идентичным, и типы возврата должны также быть идентичными.

8.4*

Если объекты или функции будут объявлены несколько раз, то их типы должны быть совместимыми.

8.5

Не должно быть никаких определений объектов или функций в заголовочном файле.

8.6

Функции должны всегда объявляться в осциллографе файла.

8.7

Объекты должны быть заданы в области действия блока, если к ним только получат доступ из одной функции.

8.8*

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

8.9*

Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение.

8.10*

Все объявления и определения объектов или функций в осциллографе файла должны иметь внутреннее рычажное устройство, если внешнее рычажное устройство не будет требоваться.

8.11

static спецификатор класса памяти должен использоваться в определениях и объявлениях объектов и функций, которые имеют внутреннее рычажное устройство

8.12

Когда массив будет объявлен с внешним рычажным устройством, его размер должен быть утвержден явным образом или задан неявно инициализацией.

Инициализация

ПравилоОписание
9.2

Фигурные скобки должны использоваться, чтобы указать и совпадать со структурой в ненулевой инициализации массивов и структурами.

9.3

В списке перечислителей, = построение не должно использоваться, чтобы явным образом инициализировать члены кроме первого, если все элементы не будут явным образом инициализированы.

Арифметическое преобразование типов

ПравилоОписание
10.1

Значение выражения целочисленного типа не должно быть неявно преобразовано в различный базовый тип если:

  • Это не преобразование в более широкий целочисленный тип того же самого, со знаком, или

  • Выражение является комплексным, или

  • Выражение не является постоянным и является аргументом функции, или

  • Выражение не является постоянным и является выражением возврата

10.2

Значение выражения типа с плавающей точкой не должно быть неявно преобразовано в другой тип если

  • Это не преобразование в более широкий тип с плавающей точкой, или

  • Выражение является комплексным, или

  • Выражение является аргументом функции, или

  • Выражение является выражением возврата

10.3

Значение сложного выражения целочисленного типа может только быть брошено к типу, который является более узким и того же самого, со знаком как базовый тип выражения.

10.4

Значение сложного выражения типа плавающего может только быть брошено к более узкому типу с плавающей точкой.

10.5

Если побитовый оператор ~ и << применяются к операнду базового типа unsigned char или unsigned short, результат должен быть сразу брошен к базовому типу операнда

10.6

Суффикс "U" должен быть применен ко всем константам unsigned типы.

Преобразование типа указателя

ПравилоОписание
11.1

Преобразование не должно выполняться между указателем на функцию и любым типом кроме целочисленного типа.

11.2

Преобразование не должно выполняться между указателем на объект и любым типом кроме целочисленного типа, другим указателем на тип объекта или указателем на void.

11.3

Бросок не должен быть выполнен между типом указателя и целочисленным типом.

11.4

Бросок не должен быть выполнен между указателем на тип объекта и различным указателем на тип объекта.

11.5

Бросок не должен выполняться, который удаляет любой const или volatile проверка от типа обращена указателем

Выражения

ПравилоОписание
12.1

Ограниченная зависимость должна быть помещена в правила приоритета оператора К в выражениях.

12.3

sizeof оператор не должен использоваться по выражениям, которые содержат побочные эффекты.

12.5

Операнды логического && или || будут первичные выражения.

12.6

Операнды логических операторов (&&, || и !) должно быть эффективно булевым. Выражение, которые являются эффективно булевыми, не должно использоваться в качестве операндов к операторам кроме (&&, || или !).

12.7

Побитовые операторы не должны быть применены к операндам, базовый тип которых подписывается.

12.9

Оператор унарный минус не должен быть применен к выражению, базовый тип которого без знака.

12.10

Оператор запятой не должен использоваться.

12.11

Оценка постоянного выражения без знака не должна вести, чтобы повториться.

12.12

Базовые битные представления значений с плавающей точкой не должны использоваться.

12.13

Шаг (++) и декремент (--) операторы не должны быть смешаны с другими операторами в выражении

Управляйте выражениями оператора

ПравилоОписание
13.1

Операторы присваивания не должны использоваться в выражениях то выражение булевы значения.

13.2

Тесты значения против нуля должны быть сделаны явными, если операнд не является эффективно булевым.

13.3

Выражения с плавающей точкой не должны быть протестированы на равенство или неравенство.

13.4

Выражение управления for оператор не должен содержать объекты типа с плавающей точкой.

13.5

Три выражения for оператор должен быть затронут только с управлением циклом.

13.6

Числовые переменные, используемые в for цикл для подсчета итерации не должен быть изменен в теле цикла.

Поток управления

ПравилоОписание
14.3

Все непустые операторы должны быть также

  • имейте по крайней мере один побочный эффект, однако выполняемый, или

  • заставьте поток управления изменяться.

14.4

goto оператор не должен использоваться.

14.5

continue оператор не должен использоваться.

14.6

Для любого оператора цикла должен быть самое большее один break оператор использовал завершение цикла for.

14.7

Функция должна иметь одну точку выхода в конце функции.

14.8

Оператор, формирующий тело switchв то время как, do while или for оператор должен быть составным оператором.

14.9

if (выражение) построение должно сопровождаться составным оператором. else ключевое слово должно сопровождаться или составным оператором или другим if оператор.

14.10

Весь if else if построения должны содержать итоговый else пункт.

Операторы switch

ПравилоОписание
15.0

Недостижимый код обнаруживается между switch оператор и первый case.

15.1

switch метка должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом switch оператор

15.2

Безусловный break оператор должен отключить каждый непустой switch пункт.

15.3

Итоговый пункт switch оператором должен быть default пункт.

15.4

switch выражение не должно представлять значение, которое является эффективно булевым.

15.5

Каждый switch оператор должен иметь по крайней мере один case пункт.

Функции

ПравилоОписание
16.1

Функции не должны быть заданы с переменными количествами аргументов.

16.3

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

16.4*

Идентификаторы, используемые в объявлении и определении функции, должны быть идентичными.

16.5

Функции без параметров должны быть объявлены с типом параметра void.

16.6

Количество аргументов, переданных функции, должно совпадать с количеством параметров.

16.8

Все выходные пути от функции с non-void возвратитесь тип должен иметь явный оператор возврата с выражением.

16.9

Функциональный идентификатор должен только использоваться с любым предыдущий &, или с заключенным в скобки списком параметров, который может быть пустым.

Указатели и массивы

ПравилоОписание
17.4

Индексация массива должна быть единственной позволенной формой адресной арифметики с указателями.

17.5

Тип не должен содержать больше чем 2 уровня косвенности указателя.

Структуры и объединения

ПравилоОписание
18.1

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

18.4

Объединения не должны использоваться.

Предварительная обработка директив

ПравилоОписание
19.1

#include операторам в файле должны только предшествовать другие директивы препроцессоров или комментарии.

19.2

Нестандартные символы не должны происходить на имена заголовочного файла в #include директивы.

19.3

#include директива должна сопровождаться или <имя файла> или последовательность "имени файла".

19.4

C макросы только расширюсь до заключенного в фигурные скобки инициализатора, константы, заключенного в скобки выражения, спецификатора типа, спецификатора класса памяти, или построение "делает в то время как нуль".

19.5

Макросами не должен быть #defined и #undefd в блоке.

19.6

#undef не буду использоваться.

19.7

Функция должна использоваться в предпочтении к функциональному подобному макросу.

19.8

Подобный функции макрос не должен быть вызван безо всех его аргументов.

19.9

Аргументы к подобному функции макросу не должны содержать лексемы, которые похожи на предварительную обработку директив.

19.10

В определении подобного функции макроса каждый экземпляр параметра должен быть заключен в круглые скобки, если это не будет использоваться в качестве операнда # или ##.

19.11

Все макро-идентификаторы в директивах препроцессору должны быть заданы перед использованием, кроме #ifdef и #ifndef директивы препроцессору и defined() оператор.

19.12

Должно быть самое большее одно вхождение # или ## операторы препроцессора в одном макроопределении.

19.13

# и ## операторы препроцессора не должны использоваться.

19.14

Заданный оператор препроцессора должен только использоваться в одной из двух стандартных форм.

19.15

Меры предосторожности должны быть приняты для того, чтобы предотвратить содержимое заголовочного файла, включаемого дважды.

19.16

Предварительная обработка директив должна быть синтаксически значимой, даже когда исключено препроцессором.

19.17

Весь #else, #elif и #endif директивы препроцессору должны находиться в том же файле как #if или #ifdef директива, с которой они связаны.

Стандартные библиотеки

ПравилоОписание
20.1

Зарезервированные идентификаторы, макросы и функции в стандартной библиотеке, не должны быть заданы, переопределены или не определены.

20.2

Имена стандартных макросов библиотеки, объектов и функций не должны быть снова использованы.

20.4

Динамическое выделение памяти кучи не должно использоваться.

20.5

Ошибочный индикатор errno не буду использоваться.

20.6

Макро-offsetof, в библиотеке <stddef.h>, не буду использоваться.

20.7

setjmp макрос и longjmp функция не должна использоваться.

20.8

Погрузочно-разгрузочное оборудование сигнала <signal.h> не буду использоваться.

20.9

Библиотека <stdio.h> ввода/вывода не буду использоваться в производственном коде.

20.10

Библиотечные функции atof, atoi и atoll от библиотеки <stdlib.h> не буду использоваться.

20.11

Библиотечные функции abortвыходgetenv и system от библиотеки <stdlib.h> не буду использоваться.

20.12

Функции обработки времени библиотеки <time.h> не буду использоваться.

Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules подмножество обозначается звездочкой.

Правила MISRA C:2012

Программное обеспечение проверяет следующие правила рано в анализ. Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules подмножество обозначается звездочкой.

Стандарт C среда

ПравилоОписание
1.1

Программа не должна содержать нарушения стандартного Синтаксиса C и ограничения, и не должна превышать пределы перевода реализации.

1.2

Расширения языка не должны использоваться.

Неиспользованный код

ПравилоОписание
2.3*

Проект не должен содержать неиспользованные описания типа.

2.4*

Проект не должен содержать неиспользованные объявления тега.

2.5*

Проект не должен содержать неиспользованные макро-объявления.

2.6

Функция не должна содержать неиспользованные описания меток.

2.7

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

Комментарии

ПравилоОписание
3.1

Последовательности символов /* и // не буду использоваться в рамках комментария.

3.2

Соединение линии не должно использоваться в // комментарии.

Наборы символов и лексические соглашения

ПравилоОписание
4.1

Должны быть отключены восьмеричные и шестнадцатеричные escape-последовательности.

4.2

Trigraphs не должен использоваться.

Идентификаторы

ПравилоОписание
5.1*

Внешние идентификаторы должны быть отличными.

5.2

Идентификаторы, объявленные в том же осциллографе и пространстве имен, должны быть отличными.

5.3

Идентификатор, объявленный во внутреннем осциллографе, не должен скрывать идентификатор, объявленный во внешнем осциллографе.

5.4

Макро-идентификаторы должны быть отличными.

5.5

Идентификаторы должны быть отличны от макро-имен.

5.6*

Имя определения типа должно быть уникальным идентификатором.

5.7*

Имя тега должно быть уникальным идентификатором.

5.8*

Идентификаторы, которые задают объекты или функции с внешним рычажным устройством, должны быть уникальными.

5.9*

Идентификаторы, которые задают объекты или функции с внутренним рычажным устройством, должны быть уникальными.

Типы

ПравилоОписание
6.1

Битовые поля должны только быть объявлены с соответствующим типом.

6.2

Одноразрядные именованные битовые поля не должны иметь типа со знаком.

Литералы и константы

ПравилоОписание
7.1

Восьмеричные константы не должны использоваться.

7.2

Суффикс "u" или "U" должен быть применен ко всем целочисленным константам, которые представлены в типе без знака.

7.3

Символ нижнего регистра "l" не должен использоваться в литеральном суффиксе.

7.4

Строковый литерал не должен быть присвоен объекту, если тип объекта не будет "указателем на квалифицированный к const char".

Объявления и определения

ПравилоОписание
8.1

Типы должны быть явным образом заданы.

8.2

Функциональные типы должны быть в прототипной форме именованными параметрами.

8.3*

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

8.4

Совместимое объявление должно отобразиться, когда объект или функция с внешним рычажным устройством будут заданы.

8.5*

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

8.6*

Идентификатор с внешним рычажным устройством должен иметь точно одно внешнее определение.

8.7*

Функции и объекты не должны быть заданы с внешним рычажным устройством, если на них ссылаются только в одном модуле перевода.

8.8

static спецификатор класса памяти должен использоваться во всех объявлениях объектов и функций, которые имеют внутреннее рычажное устройство.

8.9*

Объект должен быть задан в области действия блока, если ее идентификатор только появляется в одной функции.

8.10

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

8.11

Когда массив с внешним рычажным устройством объявляется, его размер должен быть явным образом задан.

8.12

В рамках списка перечислителей значение неявно заданного постоянного перечисления должно быть уникальным.

8.14

restrict спецификатор типа не должен использоваться.

Инициализация

ПравилоОписание
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

Макро-NULL будет единственная разрешенная форма целочисленного постоянного нулевого указателя.

Выражения

ПравилоОписание
12.1

Приоритет операторов в рамках выражений должен быть сделан явным.

12.3

Оператор запятой не должен использоваться.

12.4

Оценка константных выражений не должна приводить к переносу беззнаковых целых чисел.

Побочные эффекты

ПравилоОписание
13.3

Полное выражение, содержащее шаг (++) или декремент (--) оператор не должен иметь никаких других потенциальных побочных эффектов кроме вызванного инкрементным или оператором понижения.

13.4

Результат оператора присваивания не должен использоваться.

13.6

Операнд sizeof оператор не должен содержать выражение, которое имеет потенциальные побочные эффекты.

Управляйте выражениями оператора

ПравилоОписание
14.4

Выражение управления if оператор и выражение управления оператора цикла должны иметь по существу булев тип.

Поток управления

ПравилоОписание
15.1

goto оператор не должен использоваться.

15.2

goto оператор должен перейти к метке, объявленной позже в той же функции.

15.3

На любую метку ссылается goto оператор должен быть объявлен в том же блоке, или в любом блоке, заключающем goto оператор.

15.4

Должен быть не больше, чем один break или goto оператор раньше отключал любой оператор цикла.

15.5

Функция должна иметь одну точку выхода в конце

15.6

Тело оператора цикла или оператора выбора должно быть составным оператором.

15.7

Весь if … else if построения должны быть отключены с else оператор.

Операторы switch

ПравилоОписание
16.1

Весь switch операторы должны быть правильно построены.

16.2

switch метка должна только использоваться, когда наиболее тесно заключающий составной оператор будет телом switch оператор.

16.3

Безусловный break оператор должен отключить каждый switch- пункт.

16.4

Каждый switch оператор должен иметь default метка.

16.5

default метка должна появиться или как первое или как последний switch метка switch оператор.

16.6

Каждый switch оператор должен иметь по крайней мере два switch- пункты.

16.7

switch- выражение не должно иметь по существу булева типа.

Функции

ПравилоОписание
17.1

Функции <starg.h> не буду использоваться.

17.3

Функция не должна быть объявлена неявно.

17.4

Все выходные пути от функции с non-void возвратитесь тип должен иметь явный оператор возврата с выражением.

17.6

Объявление параметра массива не должно содержать static ключевое слово между [ ].

17.7

Значение, возвращенное функцией, имеющей non-void возвратитесь тип должен использоваться.

Указатели и массивы

ПравилоОписание
18.4

+, -, += и -= операторы не должны быть применены к выражению типа указателя.

18.5

Объявления должны содержать не больше, чем два уровня вложения указателя.

18.7

Члены массива с переменными границами не должны быть объявлены.

18.8

Типы массива переменной длины не должны использоваться.

Наложение устройства хранения данных

ПравилоОписание
19.2

union ключевое слово не должно использоваться.

Предварительная обработка директив

ПравилоОписание
20.1

#include директивам должны только предшествовать директивы препроцессору или комментарии.

20.2

', ", или \ символы и /* или // последовательности символов не должны происходить на имя заголовочного файла.

20.3

#include директива должна сопровождаться или <имя файла> или \"имя файла \" последовательность.

20.4

Макрос не должен быть задан с тем же именем как ключевое слово.

20.5

#undef не должен использоваться.

20.6

Лексемы, которые похожи на директиву предварительной обработки, не должны происходить в макро-аргументе.

20.7

Выражения, следующие из расширения макро-параметров, должны быть заключены в круглые скобки.

20.8

Выражение управления #if или #elif предварительная обработка директивы должна оценить к 0 или 1.

20.9

Все идентификаторы используются в выражении управления #if или #elif предварительной обработкой директив должен быть #define'd перед оценкой.

20.10

# и ## операторы препроцессора не должны использоваться.

20.11

Макро-параметр сразу после # оператор не должен сразу сопровождаться ## оператор.

20.12

Макро-параметр, используемый в качестве операнда к # или ## операторы, который самостоятельно удовлетворяет дальнейшей макро-замене, должны только использоваться в качестве операнда к этим операторам.

20.13

Линия, первой лексемой которой является # будет допустимая директива предварительной обработки.

20.14

Весь #else, #elif и #endif директивы препроцессору должны находиться в том же файле как #if, #ifdef или #ifndef директива, с которой они связаны.

Стандартные библиотеки

ПравилоОписание
21.1

#define и #undef не буду использоваться на зарезервированном идентификаторе или зарезервировал макро-имя.

21.2

Зарезервированный идентификатор или макро-имя не должны быть объявлены.

21.3

Функции выделения памяти и освобождения <stdlib.h> не буду использоваться.

21.4

Стандартный заголовочный файл <setjmp.h> не буду использоваться.

21.5

Стандартный заголовочный файл <signal.h> не буду использоваться.

21.6

Стандартные функции ввода/вывода Библиотеки не должны использоваться.

21.7

atof, atoi, atol, и atoll функции <stdlib.h> не буду использоваться.

21.8

Библиотечные функции abortвыходgetenv и system из <stdlib.h> не буду использоваться.

21.9

Библиотечные функции bsearch и qsort из <stdlib.h> не буду использоваться.

21.10

Стандартные функции времени и даты Библиотеки не должны использоваться.

21.11

Стандартный заголовочный файл <tgmath.h> не буду использоваться.

21.12

Функции обработки исключений <fenv.h> не должен использоваться.

Правила, которые проверяются в уровне системы и появляются только в system-decidable-rules подмножество обозначается звездочкой.

Смотрите также

| |

Похожие темы