﻿# V2573\. MISRA\. Identifiers that start with '\_\_' or '\_\[A\-Z\]' are reserved\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Согласно стандарту C\+\+ идентификаторы и имена макросов, содержащие в себе '\_\_', либо начинающиеся на '\_\[A\-Z\]', зарезервированы для использования в реализации языка и стандартной библиотеки\. В языке C тоже есть такое правило, но '\_\_' должно быть в начале идентификатора\.

Объявление таких идентификаторов снаружи стандартной библиотеки может привести к проблемам\. К примеру, код ниже может изменить поведение функции 'abs':

```cpp
#define _BUILTIN_abs(x) (x < 0 ? -x : x) 
#include <cmath>
int foo(int x, int y, bool c)
{
  return abs(c ? x : y)
}
```

если функция 'abs' реализована через использование встроенной функции компилятора \(интринсик\) следующим образом:

```cpp
#define abs(x) (_BUILTIN_abs(x))
```