MISRA C:2012 Rule 1.4

Функции языка на стадии становления не должны быть использованы

Описание

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

Функции языка на стадии становления не должны быть использованы.

Объяснение

Некоторые новые функции языка в Стандарте C11 имеют неопределенное, незаданное или заданное реализацией поведение. Эти функции могут также предоставить четко определенное поведение, которое игнорирует ожидания разработчика. Хотя правило 1.3 и директива 1.1 запрещают неопределенное и заданное реализацией поведение, чтобы избежать четко определенного поведения, которое игнорирует ожидания, некоторым функциям языка вкратце препятствуют с помощью правила 1.4.

Реализация Polyspace

Правило запрещает использование следующих функций языка:

  • _Generic оператор.

  • _Noreturn функциональный спецификатор и <stdnoreturn.h> заголовочный файл

  • _Atomic введите спецификатор и услуги, предоставленные <stdatomic.h> (например, макросы, начинающиеся с ATOMIC_ и функции, начинающиеся с atomic_ реализованный как макросы в <stdatomic.h>).

  • _Thread_local спецификатор класса памяти и средства обеспечиваются <threads.h> (например, типы, такие как thrd_t и функционирует, такие как thrd_create).

  • _Alignas спецификатор выравнивания, _Alignof оператор и <stdalign.h> заголовочный файл и средства там (такие как alignas и alignof макросы).

  • Все средства в Приложении K Стандарта C11 о 'Связано проверяющих интерфейсах, кроме определения __STDC_WANT_LIB_EXT1__ к '0'

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#define __STDC_WANT_LIB_EXT1__ 1 //Noncompliant
#include <string.h>

void Copying_functions(void) {
    char buf1[10];
    char buf2[10];
    errno_t e;  //Noncompliant
    e = memcpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = memmove_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
    e = strcpy_s(buf1,sizeof(buf1),buf2); //Noncompliant
    e = strncpy_s(buf1,sizeof(buf1),buf2,5); //Noncompliant
}

В этом примере, макро-__STDC_WANT_LIB_EXT1__ установлен в 1 так, чтобы тип errno_t как задано в заголовке stdlib.h может использоваться (в соответствии с Приложением K Стандарта C11).

Средство проверки отмечает и установку макроса к 1 и определение errno_t переменная, наряду с другими функциями из Приложения K.

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

Группа: стандарт C среда
Категория: необходимый
Категория AGC: необходимый
Введенный в R2014b