AUTOSAR C++14 Rule A0-1-3

Каждая функция, заданная в анонимном пространстве имен, или статическая функция с внутренним редактированием, или функция частного представителя, должна использоваться

Описание

Определение правила

Каждая функция, заданная в анонимном пространстве имен, или статическая функция с внутренним редактированием, или функция частного представителя, должна использоваться.

Объяснение

Функции, заданные в анонимном пространстве имен и статические функции с внутренним редактированием, вызываются только внутри модуля компиляции, в котором они определены. Точно так же функции private member могут вызываться только внутри реализации класса, к которой они относятся. В обоих случаях такие функции предназначены для использования исключительно в текущем исходном коде, а не во внешнем коде, который позже интегрируется в проект. Отказ от использования таких функций указывает на плохую разработку ПО или отсутствующую логику в текущей основе кода.

Примечание

Явного вызова функции в исходном коде достаточно, чтобы удовлетворить этому правилу, даже если вызов недоступен во время выполнения. Отдельное правило, M0-1-1, проверяет на все недоступные вхождения кода.

Реализация Polyspace

Если функция, определенная в вашем исходном коде, не вызывается явным образом и принадлежит к одной из следующих категорий, то шашка помечает определение функции:

  • Функции, заданные в анонимном пространстве имен

  • Статические функции с внутренним редактированием

  • Функции частного представителя, определенные вне определения класса

Проверка не помечает незакрытую функцию частного представителя, которая задана в определении класса.

Проверка не помечает функции частных представителей, которые заданы вне определения класса в Polyspace по умолчанию® по мере анализа You Code. Смотрите Checkers Deactivated in Polyspace как You Code Default Analysis (Polyspace Bug Finder Access).

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

#include <cstdint>

namespace
{
  void F1()   // Compliant, function in anonymous namespace used
  {
  }
  
  void F2()   // Noncompliant, function in anonymous namespace not used
  {
  }
}

int main()
{
  F1();
  return 0;
}

Статическая функция F2 определяется в анонимном пространстве имен, но не вызывается из основной функции, таким образом нарушая это правило кодирования.

#include <cstdint>
static void F1() // Compliant, static function called from main
{
}

static void F2() // Noncompliant, static function not called from main
{
}

int main()
{
  F1();
  return 0;
}

Статическая функция F2 имеет внутреннее редактирование, но не вызывается из основной функции, таким образом нарушая это правило кодирования.

#include <cstdint>

class C
{
  public:
    C() : x(0) {}
    void M1(std::int32_t);                
    void M2(std::int32_t, std::int32_t);  
  private:
    std::int32_t x;
    void M1PrivateImpl(std::int32_t j);    
};

// Compliant, member function is used
void C::M1(std::int32_t i)   
{
  x = i;
}

// Compliant, never used but declared as public
void C::M2(std::int32_t i, std::int32_t j)     
{
  x = (i > j) ? i : j;
}

void C::M1PrivateImpl(std::int32_t j) // Noncompliant, private member function never used
{
  x = j;
}

int main()
{
  C c;
  c.M1(1);
  return 0;
}

Функция частного представителя M1PrivateImpl не вызывается ни от одного представителя класса C, таким образом нарушая это правило кодирования.

Проверяйте информацию

Группа: Языковые независимые вопросы
Категория: Необходимый, Автоматизированный
Введенный в R2020b