# V3547. AUTOSAR. Identifiers that start with '__' or '_[A-Z]' are reserved.

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

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

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

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

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

    #define abs(x) (_BUILTIN_abs(x))

Данная диагностика классифицируется как:

AUTOSAR-A17.0.1