AUTOSAR C++14 Rule A0-1-3

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

Описание

Управляйте определением

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

Объяснение

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

Примечание

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

Реализация Polyspace

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

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

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

  • Член парламента, не занимающий официального поста функционирует, которые заданы вне определения класса

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

Средство проверки не отмечает функции члена парламента, не занимающего официального поста, которые заданы вне определения класса в Polyspace® по умолчанию как Вы Анализ кода. Смотрите Средства проверки, Деактивированные в Polyspace, когда Вы Кодируете Анализ По умолчанию (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