Указание времени и места применения примечания
Если примечание условно, оно может требовать, чтобы другие примечания указали на это анализатору. Например, если функция имеет переменную, которая может быть синхронной или асинхронной, функция ведет себя следующим образом: в синхронном случае он всегда успешно завершается успешно, но в асинхронном случае он сообщает об ошибке, если она не может завершиться немедленно. Когда функция вызывается синхронно, проверка значения результата не представляет никакого значения для анализатора кода, поскольку оно не было возвращено. Однако если функция вызывается асинхронно и результат функции не проверяется, может возникнуть серьезная ошибка. Этот пример иллюстрирует ситуацию, в которой можно использовать примечание _When_
для включения проверки, как описано далее в этой статье.
Структурные заметки
Для того, чтобы контролировать, когда и в каких местах применяются примечания, используйте следующие структурные примечания.
Номер | Description |
---|---|
_At_(expr, anno-list) |
expr — это выражение, которое дает lvalue. Заметки в anno-list применяются к объекту с именем expr . Для каждого примечания в anno-list , expr интерпретируется в предусловии, если примечание интерпретируется в предусловии, и в постусловии, если примечание интерпретируется в постусловии. |
_At_buffer_(expr, iter, elem-count, anno-list) |
expr — это выражение, которое дает lvalue. Заметки в anno-list применяются к объекту с именем expr . Для каждого примечания в anno-list , expr интерпретируется в предусловии, если примечание интерпретируется в предусловии, и в постусловии, если примечание интерпретируется в постусловии.iter — это имя переменной, которая находится в области заметки (включительно anno-list ). iter имеет неявный тип long . Идентичные именованные переменные в любой заключающей области скрыты от оценки.elem-count — это выражение, которое оценивает целое число. |
_Group_(anno-list) |
Примечания в anno-list рассматриваются как имеющие любой квалификатор, который применяется к групповому примечанию, применяемому к каждому примечанию. |
_When_(expr, anno-list) |
expr — это выражение, в которое можно преобразовать bool . Если он не равен нулю (true ), то примечания, определенные в anno-list , считаются применимыми.По умолчанию для каждого примечания в anno-list , expr интерпретируется с использованием входных значений, если это примечание с предусловием, и выходных значений, если это примечание с постусловием. Чтобы переопределить настройки по умолчанию, вы можете использовать встроенный _Old_ для проверки постусловия, чтобы указать, что должны использоваться входные значения. Примечание. Различные заметки могут быть включены в результате использования _When_ , если изменяемое значение , например, связано с тем, *pLength что вычисляемый результат expr предварительных условий может отличаться от его вычисляемого результата после условия. |
См. также
- Использование аннотаций SAL для уменьшения количества дефектов в коде C/C++
- Основные сведения о языке SAL
- Создание примечаний к параметрам и возвращаемым значениям функций
- Аннотация поведения функций
- Аннотация структур и классов
- Аннотация поведения блокировки
- Встроенные функции
- Рекомендации и примеры