MISRA C:2012 Rule 21.8

Стандартные Библиотечные функции abortвыход, getnenv и system из <stdlib.h> не буду использоваться

Описание

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

Стандартные Библиотечные функции abortвыход, getnenv и system из <stdlib.h> не буду использоваться.

Объяснение

Используя эти функции может вызвать неопределенные и заданные реализацией поведения.

Реализация Polyspace

Polyspace® отмечает использование abortвыходвыход, или quick_exit функции, которые заданы в <stdlib.h>.

Если эти функции являются пользовательскими, Polyspace не отмечает их.

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

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

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

#include<stdlib.h>

void foo(){
	 puts("pushed");
	//...
	_Exit(-1);//Noncompliant
}
void bar(){
	puts("pushed");
	//...
	abort();//Noncompliant
}
void foobar(){
	puts("pushed");
	//...
	quick_exit(-1);//Noncompliant
}

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

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

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