ПроблемаФлаги средства проверки правила:
Объекты, которые заданы в осциллографе файла без static
спецификатор, но используемый только в одном файле.
Функции, которые заданы без static
спецификатор, но названный только в одном файле.
Если вы намереваетесь использовать объект или функцию в одном файле только, объявите его статический.
Объекты, которые заданы в осциллографе файла без static
спецификатор, но используемый только в одном файле.
Функции, которые заданы без static
спецификатор, но названный только в одном файле.
Polyspace® Bug Finder™ и Polyspace Code Prover™ проверяют это правило кодирования по-другому. Исследования могут привести к различным результатам.
Средство проверки не отмечает эту проблему в Polyspace по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (Polyspace Bug Finder Access).
РискПодатливость с этим правилом избегает беспорядка между вашим идентификатором и идентичным идентификатором в другом модуле перевода или библиотеке. Если вы ограничиваете или уменьшаете видимость объекта путем предоставления ему внутреннего рычажного устройства или никакого рычажного устройства, вас, или кто-то еще, менее вероятно, получит доступ к объекту непреднамеренно.
Пример - переменная с внешним рычажным устройством, используемым в одном файлеЗаголовочный файл:
/* file.h */
extern int var;
Первый исходный файл:
/* file1.c */
#include "file.h"
int var; /* Compliant */
int var2; /* Non compliant */
static int var3; /* Compliant */
void reset(void);
void reset(void) {
var = 0;
var2 = 0;
var3 = 0;
}
Второй исходный файл:
/* file2.c */
#include "file.h"
void increment(int var2);
void increment(int var2) {
var++;
var2++;
}
В этом примере:
Объявление var
совместимо потому что var
объявляется с внешним рычажным устройством и используется в нескольких файлах.
Объявление var2
несовместимо потому что var2
объявляется с внешним рычажным устройством, но используется в одном файле только.
Это может появиться тот var2
задан в обоих файлах. Однако во втором файле, var2
параметр без рычажного устройства и различный как var2
в первом файле.
Объявление var3
совместимо потому что var3
объявляется с внутренним рычажным устройством (с static
спецификатор) и используемый в одном файле только.
Пример - функционирует с внешним рычажным устройством, используемым в одном файлеЗаголовочный файл:
/* file.h */
extern int var;
extern void increment1 (void);
Первый исходный файл:
/* file1.c */
#include "file.h"
int var;
void increment2(void);
static void increment3(void);
void func(void);
void increment2(void) { /* Non compliant */
var+=2;
}
static void increment3(void) { /* Compliant */
var+=3;
}
void func(void) {
increment1();
increment2();
increment3();
}
Второй исходный файл:
/* file2.c */
#include "file.h"
void increment1(void) { /* Compliant */
var++;
}
В этом примере:
Определение increment1
совместимо потому что increment1
задан с внешним рычажным устройством и назван в различном файле.
Объявление increment2
несовместимо потому что increment2
задан с внешним рычажным устройством, но назван в том же файле и больше нигде.
Объявление increment3
совместимо потому что increment3
задан с внутренним рычажным устройством (с static
спецификатор) и названный в том же файле и больше нигде.