Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Запрещено использовать спецификатор 'restrict' в декларациях переменных, формальных параметров функций и полей структур/объединений. Несмотря на то, что компилятор может сгенерировать более оптимизированный код, это может привести к ошибкам, если два и более указателей ссылаются на одну и ту же область памяти.
Пример кода, на который анализатор выдаёт предупреждения:
void my_memcpy(void * restrict dest, const void * restrict src, size_t bytes) { // ... } typedef struct { void * restrict m_field; } MyStruct;
Данная диагностика классифицируется как:
|