exponenta event banner

MISRA C:2012 Правило 22.4

Не должно быть попыток записи в поток, открытый как доступный только для чтения

Описание

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

Не должно быть попыток записи в поток, открытый как доступный только для чтения.

Объяснение

Стандарт не определяет поведение при попытке записи в поток только для чтения.

Внедрение Polyspace

Это правило можно проверить только с помощью анализа Bug Finder.

Поиск неисправностей

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

Примеры

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

#include <stdio.h>

void func1(void) {
    FILE *fp1 = fopen("tmp.txt", "r");
    (void) fprintf(fp1, "Some text"); /* Non-compliant: Read-only stream */
    (void) fclose(fp1);
}

void func2(void) {
    FILE *fp2 = fopen("tmp.txt", "r+");
    (void) fprintf(fp2, "Some text"); /* Compliant */
    (void) fclose(fp2);
}

В этом примере поток файлов, связанный с fp1 открыт как доступный только для чтения. Правило нарушается при записи потока.

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

Группа: Ресурсы
Категория: Обязательно
Категория СМЖЛ: обязательная
Представлен в R2015b