# V3549. AUTOSAR. The global namespace should only contain 'main', namespace declarations and 'extern "C"' declarations.

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

Объявления в глобальном пространстве, засоряют список доступных идентификаторов. Новые идентификаторы, добавленные в область видимости блока, могут быть схожими с идентификаторами в глобальном пространстве. Это может запутать разработчика и привести к ошибочному выбору идентификатора.

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

Пример кода, на который анализатор выдает предупреждение:

    int x1;
    void foo();

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

    namespace N1
    {
      int x1;
      void foo();
    }

Также допустимый вариант c extern "C" может выглядеть так:

    extern "C"
    {
      int x1;
    }
    extern "C" void bar();

Согласно стандарту AUTOSAR разрешено использовать 'typedef' в глобальном пространстве имен в том случае, если имя псевдонима типа содержит в себе размер его итогового типа.

Пример кода, на который анализатор не выдает предупреждений:

    typedef short int16_t;
    typedef int INT32;
    typedef unsigned long long Uint64;

Пример кода, на который анализатор выдает предупреждения:

    typedef std::map<std::string, std::string> TestData;
    typedef int type1;

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

AUTOSAR-M7.3.1