Имя идентификатора объекта лица, не являющегося членом какой-либо организации, со статической продолжительностью хранения или статической функцией не должно быть снова использовано в пространстве имен.
Имя идентификатора объекта лица, не являющегося членом какой-либо организации, со статической продолжительностью хранения или статической функцией не должно быть снова использовано в пространстве имен.
Вы используете пространства имен, чтобы сузить осциллограф идентификаторов, которые вы объявляете в этих пространствах имен. Это препятствует тому, чтобы эти идентификаторы были ошибочны с идентичными идентификаторами в других осциллографах. Если вы снова используете идентификатор со статической продолжительностью хранения в том же пространстве имен через исходные файлы, вы можете перепутать один идентификатор для другого.
Когда вы снова используете идентификаторы, Polyspace® отмечает последнее использование идентификатора, если они находятся в том же модуле перевода. Если идентификаторы находятся в отдельных файлах, идентификатор в последнем пути к файлу алфавитным порядком отмечается.
Однако, если вы снова используете идентификатор, но объявляете только один экземпляр идентификатора с ключевым словом static, тот идентификатор отмечается независимо от порядка, в котором объявляются идентификаторы.
Polyspace не повышает нарушения, если вы объявляете идентификатор в пространстве имен, и вы снова используете тот идентификатор в том же пространстве имен, но во вложенном или встроенном пространстве имен. Например, никакое нарушение не повышено на reusedVar в этом фрагменте кода.
//file1.cpp
namespace foo {
static int reusedVar; //resuedVar has static storage duration
}
//file2.cpp
namespace foo {
void func();
namespace nested_foo {
float reusedVar;
}
inline namespace inlined_foo {
char reusedVar;
}
}
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: Лексические соглашения |
| Категория: необходимый, автоматизированный |