Побочные эффекты аргумента потока происходят более одного раза
Этот дефект возникает при вызове getc()
, putc()
, getwc()
, или putwc()
с аргументом потока, который имеет побочные эффекты.
Аргумент Stream с возможно непреднамеренными побочными эффектами рассматривает следующие побочные эффекты Stream:
Любое назначение переменной потока, такого как FILE *
, или любое назначение переменной более глубокого типа потока, такого как массив FILE *
.
Любой вызов функции, которая манипулирует потоком или более глубоким типом потока.
Количество выявленных дефектов соответствует количеству выявленных побочных эффектов. Когда аргумент потока оценивается несколько раз в функции, реализованной как макрос, для каждой оценки возникает дефект, который имеет побочный эффект.
Дефект также возникает на функциях, которые не реализованы как макросы, но могут быть реализованы как макросы в другой операционной системе.
Если функция реализована как небезопасный макрос, аргумент в потоке может быть оценен более одного раза, и побочный эффект потока происходит несколько раз. Например, аргумент потока, вызывающий fopen()
может открывать один и тот же файл несколько раз, что является неопределенным поведением.
Чтобы убедиться, что побочный эффект потока происходит только один раз, используйте отдельный оператор для аргумента потока.
Группа: Программирование |
Язык: C | C++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки
: STREAM_WITH_SIDE_EFFECT |
Влияние: Низкое |
Find defects (-checkers)
| Opening previously opened resource
| Returned value of a sensitive function not checked
| Standard function call with incorrect arguments