Поделиться через


Набор правил "Рекомендуемые правила для смешанных сред"

Набор правил "Минимально рекомендованные правила Microsoft" используется для того, чтобы сосредоточиться на наиболее критических проблемах проектов C++, поддерживающих среду CLR, включая возможные бреши в системе безопасности, сбои приложения и другие важные ошибки логики и дизайна.Этот набор правил следует включать во все пользовательские наборы правил, создаваемые для проектов C++, которые поддерживают среду CLR.Этот набор правил можно настраивать в выпуске Visual Studio Professional или в выпусках более высокого уровня.

Правило

Описание

C6001

Использование неинициализированной памяти

C6011

Разыменование пустого указателя

C6029

Использование значения unchecked

C6031

Возвращаемое значение игнорируется.

C6053

Нулевое завершение из вызова

C6054

Отсутствует нулевое завершение

C6059

Недопустимое соединение

C6063

Отсутствующий строковый аргумент для форматирования функции

C6064

Отсутствующий целочисленный аргумент для форматирования функции

C6066

Отсутствующий аргумент-указатель для форматирования функции

C6067

Отсутствующий аргумент-указатель на строку для форматирования функции

C6101

Возвращение не инициализированной памяти

C6200

Индекс превышает максимальный размер буфера

C6201

Индекс превышает максимальный размер буфера стека

C6214

Недопустимое приведение HRESULT к BOOL

C6215

Недопустимое приведение BOOL к HRESULT

C6216

Недопустимое вставленное компилятором приведение BOOL к HRESULT

C6217

Недопустимая проверка HRESULT с использованием NOT

C6220

Недопустимое сравнение HRESULT с -1

C6226

Недопустимое присваивание HRESULT значения -1

C6230

Недопустимое использование HRESULT в качестве логического типа

C6235

Ненулевая константа с логическим ИЛИ

C6236

Логическое ИЛИ с ненулевой константой

C6237

Ноль с логическим И теряет побочные эффекты

C6242

Вызвана локальная раскрутка стека

C6248

Создание пустого (NULL) списка DACL

C6250

Неосвобожденные дескрипторы адресов

C6255

Незащищенное использование функции alloca

C6258

Использование завершенного потока

C6259

Невызываемый код в операторе switch, ограниченном побитовым ИЛИ

C6260

Использование байтовой арифметики

C6262

Чрезмерное использование стеков

C6263

Использование alloca в цикле

C6268

Пропущены скобки при приведении

C6269

Разыменование указателя игнорируется

C6270

Отсутствующий аргумент с плавающей запятой для форматирования функции

C6271

Дополнительный аргумент для форматирования функции

C6272

Аргумент, отличный от числа с плавающей запятой, для форматирования функции

C6273

Аргумент, отличный от целочисленного значения, для форматирования функции

C6274

Аргумент, отличный от символьного значения, для форматирования функции

C6276

Недопустимое приведение строк

C6277

Недопустимый вызов CreateProcess

C6278

Несоответствие между созданием массива и удалением скалярной переменной

C6279

Несоответствие между созданием скалярной переменной и удалением массива

C6280

Несоответствие между выделением и освобождением памяти

C6281

Приоритет битовых связей

C6282

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

C6283

Несоответствие между созданием примитивного массива и удалением скалярной переменной

C6284

Недопустимый аргумент-объект для форматирования функции

C6285

Логическое ИЛИ для константы

C6286

Ненулевое логическое ИЛИ приводит к потере побочных эффектов

C6287

Избыточная проверка

C6288

Результат взаимного включения через логическое И всегда равен false

C6289

Результат взаимного исключение через логическое ИЛИ всегда равен true

C6290

Логическое НЕ, затем побитовое И

C6291

Логическое НЕ, затем побитовое ИЛИ

C6292

Перебор цикла идет вверх от максимального значения

C6293

Перебор цикла идет вниз от минимального значения

C6294

Тело цикла никогда не выполняется

C6295

Бесконечный цикл

C6296

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

C6297

Результат сдвига приводится к значению большего размера

C6299

Сравнение битового поля с логическим значением

C6302

Недопустимый символьный аргумент для форматирования функции

C6303

Недопустимый аргумент строк расширенных символов для форматирования функции

C6305

Рассогласованная использование размера и количества

C6306

Неверный вызов функции аргумента переменной

C6308

Утечка при использовании Realloc

C6310

Неверная константа в фильтре исключений

C6312

Исключения продолжает цикл выполнения

C6314

Приоритет побитового ИЛИ

C6317

Двойное отрицание

C6318

Исключение продолжает поиск

C6319

Игнорируется запятой

C6324

Копирование строк вместо сравнения строк

C6328

Возможное несоответствие типов аргументов

C6331

Недопустимые флаги VirtualFree

C6332

Недопустимый параметр VirtualFree

C6333

Недопустимый размер VirtualFree

C6335

Утечка в дескрипторе процесса

C6381

Отсутствуют сведения о выключении

C6383

Переполнение буфера из-за преобразования счетчика элементов в счетчик байтов

C6384

Деление размера указателя

C6385

Переполнение при чтении

C6386

Переполнение при записи

C6387

Недопустимое значение параметра

C6388

Недопустимое значение параметра

C6500

Недопустимое свойство атрибута

C6501

Конфликтующие значения свойств атрибута

C6503

Ссылка на параметр не может иметь значение null

C6504

Значение null для типа, отличного от указателя

C6505

MustCheck для типа void

C6506

Размер буфера для типа, отличного от указателя, или массива

C6507

Несоответствие null нулю при разыменовании

C6508

Доступ для записи константы

C6509

Возврат, используемый в предусловии

C6510

Строка, заканчивающаяся нулем, для типа, отличного от указателя

C6511

Значением MustCheck должно быть Yes или No.

C6513

Размер элемента без учета размера буфера

C6514

Размер буфера превышает размер массива

C6515

Размер буфера для типа, отличного от указателя

C6516

Нет свойств атрибута

C6517

Допустимый размер для буфера, не поддерживающего чтение

C6518

Допустимый размер для записи в буфер, не поддерживающий запись

C6519

Недопустимая аннотация: значение свойства NeedsRelease должно быть равно Yes или No

C6521

Недопустимое разыменование строки размера

C6522

Недопустимый тип строки размера

C6523

Недопустимый параметр строки размера

C6525

Недопустимое недостижимое местоположение строки размера

C6526

Недопустимый тип буфера строки размера

C6527

Недопустимая аннотация: Свойство "NeedsRelease" не может быть использовано со значениями типа void

C6530

Неопознанный стиль строки формата

C6540

Если для данной функции использовать аннотации атрибута, все ее существующие аннотации __declspec станут недействительными

C6551

Неверно указан размер: синтаксический анализ выражения невозможен

C6552

Недопустимое Deref= или Notref=: синтаксический анализ выражения невозможен

C6701

Значение не является одним из допустимых значений (Yes/No/Maybe)

C6702

Значение не является строковым значением

C6703

Значение не является числом

C6704

Непредвиденная ошибка выражения аннотации

C6705

Ожидаемое количество аргументов для аннотации не соответствует фактическому числу аргументов для аннотации

C6706

Непредвиденная ошибка аннотации для аннотации

C6995

Не удалось сохранить XML-файл журнала

C26100

Состояние гонки

C26101

Не удается правильно использовать заблокированную операцию

C26110

Вызывающей стороне не удается удержать блокировку

C26111

Вызывающей стороне не удается освободить блокировку

C26112

Вызывающая сторона не может удерживать никакие блокировки

C26115

Не удается освободить блокировку

C26116

Не удается получить или удержать блокировку

C26117

Освобождение неудерживаемой блокировки

C26140

Ошибка примечания Concurrency SAL

C28020

Выражение не равно значению true при этом вызове

C28021

Аннотируемый параметр должен быть указателем

C28022

Классы данной функции не совпадают с классами функции в typedef, используемом для ее определения

C28023

Назначаемая или передаваемая функция должна иметь аннотацию _Function_class_ по крайней мере для одного из классов

C28024

Функция, которой назначается указатель, аннотирована классом функции, не содержащимся в списке класса(ов) функции.

C28039

Тип фактического параметра должен в точности совпадать с типом

C28112

Обращение к переменной, доступ к которой возможен только через функцию с модификатором Interlocked, должно выполняться через такую функцию

C28113

Обращение к локальной переменной через функцию Interlocked

C28125

Вызов функции должен выполняться из блока try/except

C28137

Переменный аргумент должен быть константой (литералом).

C28138

Константный аргумент должен быть переменной.

C28159

Попробуйте использовать другую функцию

C28160

заметка Error

C28163

Вызов функции не должен выполняться из блока try/except

C28164

Аргумент передается в функцию, которая ожидает указатель на объект (а не указатель на указатель)

C28182

Разыменование пустого (NULL) указателя.Указатель содержит то же NULL значение, что и содержал другой указатель.

C28183

Аргумент должен быть единственным значением, однако является копией значения, находящегося в указателе

C28193

Переменная содержит значение, которое необходимо проверить

C28196

Требование не удовлетворяется. (Результат выражения не равен значению true.)

C28202

Недопустимая ссылка на нестатический член

C28203

Неоднозначная ссылка на член класса.

C28205

_Success_ или _On_failure_ используется в недопустимом контексте

C28206

Левый операнд указывает на структуру, используйте '->'

C28207

Левый операнд является структурой, используйте "."

C28209

Для объявления символа имеется конфликтующее объявление.

C28210

Аннотации для контекста __on_failure не должны находиться в явном предварительном контексте

C28211

Для SAL_context ожидалось статическое имя контекста

C28212

Выражение указателя требуется для аннотации

C28213

Аннотация _Use_decl_annotations_ должна использоваться для ссылки, без изменения, перед объявлением.

C28214

Допустимые имена параметров атрибута: p1...p9

C28215

typefix нельзя применять к параметру, который уже имеет typefix

C28216

Аннотация checkReturn применяется только к постусловиям для параметра конкретной функции.

C28217

Для функции число параметров для аннотации не совпадает с числом параметров, обнаруженных в файле

C28218

Для функции paramteer параметр аннотации не соответствует параметру, обнаруженном в файле

C28219

Для параметра аннотации ожидался член перечисления

C28220

Для параметра в аннотации ожидалось целочисленное выражение

C28221

Для параметра в аннотации ожидалось строковое выражение

C28222

__yes, __no или __maybe требуется для аннотации

C28223

Не найден ожидаемый токен/идентификатор для аннотации, параметр

C28224

Для аннотации требуются параметры.

C28225

Невозможно определить верное число обязательных параметров в аннотации

C28226

Аннотация не может также быть PrimOp (в текущем объявлении)

C28227

Аннотация не может также быть PrimOp (см. предыдущее объявление)

C28228

Параметр аннотации: невозможно использовать тип в аннотациях

C28229

Аннотация не поддерживает параметры

C28230

В типе параметра нет члена.

C28231

Аннотация доступная только для массива

C28232

pre, post или deref не применено для аннотации

C28233

pre, post или deref применено к блоку

C28234

Выражение __at не применяется к текущей функции

C28235

Функция не может использоваться изолированно как аннотация

C28236

Аннотацию нельзя использовать в выражениях

C28237

Аннотация в параметре больше не поддерживается.

C28238

Аннотация в параметре содержит несколько значений value, stringValue и longValue.Используйте paramn=xxx

C28239

Аннотация в параметре одновременно содержит значение value, stringValue или longValue и выражение paramn=xxx.Используйте только paramn=xxx

C28240

Аннотация в параметре содержит param2, но не содержит param1

C28241

Аннотация для функции в параметре не распознана

C28243

Аннотации для функции в параметре требуется больше разыменований, чем допускает фактический аннотируемый тип.

C28244

Аннотация для функции содержит аннотацию параметра или внешнюю аннотацию, не поддающуюся синтаксическому анализу

C28245

Аннотация для функции аннотирует "this" в функции, не являющейся членом

C28246

Аннотация параметра для функции не соответствует типу параметра

C28250

Несогласованная аннотация для функции: предыдущий экземпляр содержит ошибку.

C28251

Несогласованная аннотация для функции: данный экземпляр содержит ошибку.

C28252

Несогласованная аннотация для функции: параметр имеет другие аннотации в этом экземпляре.

C28253

Несогласованная аннотация для функции: параметр имеет другие аннотации в этом экземпляре.

C28254

dynamic_cast<>() не поддерживается в аннотациях

C28262

В функции обнаружена синтаксическая ошибка аннотации

C28263

Во встроенной функции обнаружена синтаксическая ошибка условной аннотации:

C28264

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

C28267

В функции обнаружена синтаксическая ошибка аннотаций.

C28272

Аннотация для функции: параметр не согласуется с объявлением функции при проверке

C28273

Функция: подсказки не согласуются с объявлением функции

C28275

Значение параметра для _Macro_value_ равно NULL

C28279

Для символа обнаружен begin без соответствующего end.

C28280

Для символа обнаружен end без соответствующего begin

C28282

Строки форматирования должны находиться в предусловиях

C28285

Для функции: синтаксическая ошибка в параметре

C28286

Для функции: ошибка рядом с окончанием

C28287

Для функции: синтаксическая ошибка в аннотации _At_() (не распознано имя параметра)

C28288

Для функции: синтаксическая ошибка в аннотации _At_() (недопустимое имя параметра)

C28289

Для функции: ReadableTo или WritableTo не содержало спецификацию ограничения в качестве параметра

C28290

количество внешних элементов в аннотации для функции превышает фактическое число параметров

C28291

постусловие null/notnull в deref уровня 0 не имеет смысла для функции.

C28300

несовместимые типы операндов выражения для оператора

C28301

Аннотации отсутствуют для первого объявления функции.

C28302

Дополнительный оператор _Deref_ был найден в аннотации.

C28303

Неоднозначный оператор _Deref_ был найден в аннотации.

C28304

Неправильно помещенный оператор _Notref_ был применим к токену.

C28305

При разборе токена была обнаружена ошибка.

C28306

Заметка в параметре устарела

C28307

Заметка в параметре устарела

C28350

Аннотация описывает ситуацию, к которой неприменимы условия.

C28351

Аннотация описывает ситуацию, когда динамическое значение (переменная) не может использоваться в условии.

CA1001

Типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми

CA1009

Правильно объявите обработчики событий

CA1016

Пометьте сборки атрибутом AssemblyVersionAttribute

CA1033

Методы интерфейса должны быть доступны для вызова дочерним типам

CA1049

Типы, которым принадлежат собственные ресурсы, должны быть освобождаемыми

CA1060

Переместите P/Invokes в класс NativeMethods

CA1061

Не скрывайте методы базового класса

CA1063

Следует правильно реализовывать IDisposable

CA1065

Не вызывайте исключения в непредвиденных местах

CA1301

Избегайте повторяющихся сочетаний клавиш быстрого доступа

CA1400

Необходимо наличие точек входа P/Invoke

CA1401

Методы P/Invoke не должны быть видимыми

CA1403

Типы макета Auto не должны быть видимыми для COM

CA1404

Вызовите GetLastError сразу после P/Invoke

CA1405

Базовые типы, относящиеся к типу видимых COM-клиенту, должны быть видимыми для COM

CA1410

Методы регистрации COM должны быть согласованы

CA1415

Правильно объявите методы P/Invoke

CA1821

Удалите пустые методы завершения

CA1900

Поля типа значения должны быть переносимыми

CA1901

Объявления P/Invoke должны быть переносимыми

CA2002

Не блокируйте объекты со слабой идентификацией

CA2100

Проанализируйте SQL-запросы с целью выявления уязвимостей безопасности

CA2101

Укажите тип маршалинга для строковых аргументов P/Invoke

CA2108

Проверьте объявляемые параметры безопасности типов значений

CA2111

Указатели не должны быть видимыми

CA2112

Защищенные типы не должны предоставлять поля

CA2114

Безопасность метода должна быть надмножеством типа

CA2116

APTCA-методы должны вызывать только APTCA-методы

CA2117

APTCA-типы должны расширять только базовые APTCA-типы

CA2122

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

CA2123

Переопределяющие требования ссылки должны быть идентичны базовым

CA2124

Ограничьте уязвимые предложения finally во внешних блоках try

CA2126

Для требований ссылок на тип необходимы требования наследования

CA2131

Критические с точки зрения безопасности типы могут не участвовать в эквивалентности типов

CA2132

Конструкторы по умолчанию должны быть по меньшей мере такими же критическими, как конструкторы по умолчанию базового типа

CA2133

Делегаты должны привязываться к методам с соответствующей прозрачностью

CA2134

Методы должны сохранять согласованную прозрачность при переопределении базовых методов

CA2137

Прозрачные методы должны содержать только поддающийся проверке IL

CA2138

Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurity

CA2140

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

CA2141

Прозрачные методы не должны удовлетворять требования LinkDemand

CA2146

Типы должны быть настолько же критическими, как их базовые типы и интерфейсы.

CA2147

Прозрачные методы могут не использовать утверждения безопасности

CA2149

Прозрачные методы не должны вызывать машинный код

CA2200

Следует повторно вызывать исключение для сохранения сведений о стеке

CA2202

Не удаляйте объекты несколько раз

CA2207

Используйте встроенную инициализацию статических полей типов значений

CA2212

Не помечайте обслуживаемые компоненты атрибутом WebMethod

CA2213

Высвободите высвобождаемые поля

CA2214

Не вызывайте переопределяемые методы в конструкторах

CA2216

Высвобождаемые типы должны объявлять метод завершения

CA2220

Методы завершения должны вызывать метод завершения базового класса

CA2229

Реализуйте конструкторы сериализации

CA2231

Перегружать равенство операторов следует при перегрузке ValueType.Equals

CA2232

Отметьте точки входа Windows Forms меткой STAThread

CA2235

Пометьте все несериализуемые поля

CA2236

Вызовите методы базового класса для типов ISerializable

CA2237

Пометьте типы ISerializable атрибутом SerializableAttribute

CA2238

Правильно реализуйте методы сериализации

CA2240

Правильно реализуйте ISerializable

CA2241

Предоставьте правильные аргументы методам форматирования

CA2242

Правильно выполните проверку NaN