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