Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C++. Объявления в глобальном пространстве, засоряют список доступных идентификаторов. Новые идентификаторы, добавленные в область видимости блока, могут быть схожими с идентификаторами в глобальном пространстве. Это может запутать разработчика и привести к ошибочному выбору идентификатора.
Чтобы гарантировать ожидания разработчика, все идентификаторы должны располагаться внутри соответствующих пространств имен.
Пример кода, на который анализатор выдает предупреждение:
int x1;
void foo();
В соответствии с правилом данный код должен выглядеть следующим образом:
namespace N1
{
int x1;
void foo();
}
Также допустимый вариант c extern "C" может выглядеть так:
extern "C"
{
int x1;
}
extern "C" void bar();
Согласно стандарту MISRA разрешено использовать 'typedef' в глобальном пространстве имен в том случае, если имя псевдонима типа содержит в себе размер его итогового типа.
Пример кода, на который анализатор не выдает предупреждений:
typedef short int16_t;
typedef int INT32;
typedef unsigned long long Uint64;
Пример кода, на который анализатор выдает предупреждения:
typedef std::map<std::string, std::string> TestData;
typedef int type1;
Данная диагностика классифицируется как:
|