혼합 권장 규칙 규칙 집합

Microsoft 혼합 권장 규칙은 잠재적인 보안 허점, 애플리케이션 크래시, 기타 중요한 논리/디자인 오류를 포함하여 공용 언어 런타임을 지원하는 C++ 프로젝트에서 가장 일반적이고 중요한 문제에 중점을 줍니다. 이 규칙 집합은 혼합 최소 규칙 규칙 집합에 모든 규칙을 포함합니다.

공용 언어 런타임을 지원하는 C++ 프로젝트에 대해 만드는 모든 사용자 지정 규칙 집합에 이 규칙 집합을 포함합니다.

규칙 설명
C6001 초기화되지 않은 메모리 사용
C6011 Null 포인터 역참조
C6029 확인되지 않은 값 사용
C6031 반환 값이 무시됨
C6053 호출의 0 종료
C6054 0 종료 누락
C6059 잘못된 연결
C6063 Format 함수에 문자열 인수 없음
C6064 Format 함수에 정수 인수 없음
C6066 Format 함수에 포인터 인수 없음
C6067 Format 함수에 문자열 포인터 인수 없음
C6101 초기화되지 않은 메모리 반환
C6200 인덱스가 버퍼 최대값을 초과함
C6201 인덱스가 스택 버퍼 최대값을 초과함
C6214 HRESULT를 BOOL로 잘못된 캐스팅
C6215 BOOL을 HRESULT로 잘못된 캐스팅
C6216 BOOL을 HRESULT로 잘못된 컴파일러 삽입 캐스팅
C6217 NOT이 있는 잘못된 HRESULT 테스트
C6220 -1에 잘못된 HRESULT 비교
C6226 -1에 잘못된 HRESULT 할당
C6230 HRESULT를 부울로 잘못된 사용
C6235 논리적 Or를 포함하는 0이 아닌 상수
C6236 0이 아닌 상수를 포함하는 논리적 Or
C6237 논리적 And를 포함하는 0에 부작용이 없음
C6242 로컬 해제 적용됨
C6248 Null DACL 만들기
C6250 릴리스되지 않은 주소 설명자
C6255 보호되지 않는 Alloca 사용
C6258 스레드 종료 사용
C6259 비트 Or 제한된 스위치의 데드 코드
C6260 바이트 산술 사용
C6262 과도한 스택 사용량
C6263 루프에서 Alloca 사용
C6268 캐스트에 괄호 누락
C6269 포인터 역참조가 무시됨
C6270 Format 함수에 부동 인수 없음
C6271 Format 함수의 추가 인수
C6272 Format 함수의 비부동 인수
C6273 Format 함수에 비정수 인수
C6274 Format 함수의 비문자 인수
C6276 잘못된 문자열 캐스팅
C6277 잘못된 CreateProcess 호출
C6278 배열-새 스칼라-삭제 불일치
C6279 스칼라-새 배열-삭제 불일치
C6280 메모리 할당-할당 해제 불일치
C6281 비트 관계 우선 순위
C6282 할당이 테스트를 대체함
C6283 기본 배열-새 스칼라-삭제 불일치
C6284 Format 함수의 개체 인수 잘못됨
C6285 상수의 논리적 Or
C6286 0이 아닌 논리적 Or에 부작용이 없음
C6287 중복 테스트
C6288 논리적 And에 대한 상호 포함이 False임
C6289 논리적 Or에 대한 상호 포함이 True임
C6290 논리 부정 비트 AND 우선 순위
C6291 논리 부정 비트 OR 우선 순위
C6292 루프가 최댓값부터 위로 계산됨
C6293 루프가 최솟값부터 아래로 계산됨
C6294 루프 본문은 실행되지 않음
C6295 무한 루프
C6296 루프는 한 번만 실행됨
C6297 시프트 결과가 더 큰 크기로 캐스팅됨
C6299 비트 필드 및 부울 비교
C6302 Format 함수에 대한 잘못된 문자열 인수
C6303 Format 함수에 대한 잘못된 와이드 문자열 인수
C6305 크기 및 개수 사용 불일치
C6306 잘못된 변수 인수 함수 호출
C6308 Realloc 누수
C6310 잘못된 예외 필터 상수
C6312 예외 실행 루프 계속
C6314 비트 Or 우선 순위
C6317 Not 보수가 아님
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 Void에 대한 MustCheck
C6506 비포인터 또는 배열에 대한 버퍼 크기
C6508 상수에 대한 쓰기 액세스
C6509 사전 조건에서 반환이 사용됨
C6510 비포인터에 대한 Null 종료
C6511 MustCheck는 Yes 또는 No여야 함
C6513 버퍼 크기가 없는 요소 크기
C6514 버퍼 크기가 배열 크기를 초과함
C6515 비포인터에 대한 버퍼 크기
C6516 특성에 대한 속성 없음
C6517 읽기 불가능 버퍼에 대한 유효 크기
C6518 쓰기 불가능 버퍼에 대한 쓰기 가능 크기
C6522 잘못된 크기 문자열 유형
C6525 잘못된 크기 문자열 접근할 수 없는 위치
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 동시성 SAL 주석 오류
C28020 이 호출에서 식이 true가 아님
C28021 주석이 달린 매개 변수는 포인터여야 합니다.
C28022 이 함수의 함수 클래스가 정의에 사용된 typedef의 함수 클래스와 일치하지 않습니다.
C28023 할당되거나 전달되는 함수에는 하나 이상의 클래스에 대한 _Function_class_ 주석이 있어야 합니다.
C28024 할당 중인 함수 포인터에 함수 클래스로 주석이 추가되었는데 이 클래스는 함수 클래스 목록에 포함되지 않습니다.
C28039 실제 매개 변수의 형식은 형식과 정확히 일치해야 합니다.
C28112 Interlocked 함수를 통해 액세스되는 변수는 항상 Interlocked 함수를 통해 액세스해야 합니다.
C28113 Interlocked 함수를 통해 지역 변수에 액세스합니다.
C28125 함수는 try/except 블록 내에서 호출해야 합니다.
C28137 변수 인수는 대신 (리터럴) 상수여야 합니다.
C28138 상수 인수는 대신 변수여야 합니다.
C28159 대신 다른 함수를 사용하는 것이 좋습니다.
C28160 오류 주석
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 함수 매개 변수의 경우 주석의 매개 변수가 파일에 있는 매개 변수와 일치하지 않습니다.
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 매개 변수에 대한 주석에 param1이 아니라 param2가 있습니다.
C28241 매개 변수에 대한 함수 주석이 인식되지 않습니다.
C28243 매개 변수에 대한 함수 주석에 실제 형식 주석이 허용하는 것보다 많은 역참조가 필요합니다.
C28244 함수에 대한 주석에 구문 분석할 수 없는 매개 변수/외부 주석이 있습니다.
C28245 함수에 대한 주석에서 멤버가 아닌 함수에 'this'를 주석으로 답니다.
C28246 함수의 매개 변수 주석이 매개 변수 형식과 일치하지 않습니다.
C28250 함수에 대한 주석이 일치하지 않습니다. 이전 인스턴스에 오류가 있습니다.
C28251 함수에 대한 주석이 일치하지 않습니다. 이 인스턴스에 오류가 있습니다.
C28252 함수에 대한 주석이 일치하지 않습니다. 이 인스턴스에 대한 다른 주석이 매개 변수에 있습니다.
C28253 함수에 대한 주석이 일치하지 않습니다. 이 인스턴스에 대한 다른 주석이 매개 변수에 있습니다.
C28254 <>주석에서 dynamic_cast()가 지원되지 않습니다.
C28262 주석에 대한 주석 구문 오류가 함수에 있습니다.
C28263 내장 주석에 대한 조건부 주석에 구문 오류가 있습니다.
C28267 함수 주석에서 주석 구문 오류가 발견되었습니다.
C28272 함수, 매개 변수에 대한 주석이 검사 시 함수 선언과 일치하지 않습니다.
C28273 함수의 경우 단서가 함수 선언과 일치하지 않습니다.
C28275 _Macro_value_ 매개 변수가 null입니다.
C28279 기호의 경우 일치하는 'end'가 없는 'begin'이 있습니다.
C28280 기호의 경우 일치하는 'begin'이 없는 'end'가 있습니다.
C28282 형식 문자열이 사전 조건에 있어야 합니다.
C28285 함수의 경우 매개 변수에 구문 오류가 있습니다.
C28286 함수의 경우 끝 부분 근처에 구문 오류가 있습니다.
C28287 함수의 경우 _At_() 주석의 구문 오류(인식할 수 없는 매개 변수 이름)
C28288 함수의 경우 _At_() 주석의 구문 오류(잘못된 매개 변수 이름)
C28289 함수의 경우 ReadableTo 또는 WritableTo에 limit-spec가 매개 변수로 포함되지 않았습니다.
C28290 함수의 주석에 실제 매개 변수 개수보다 많은 외부 참조가 있습니다.
C28291 함수의 경우 역참조 수준 0에서 post null/notnull이 의미가 없습니다.
C28300 연산자에 호환되지 않는 형식의 식 피연산자입니다.
C28301 함수의 첫 번째 선언에 대한 주석이 없습니다.
C28302 주석에서 추가 _Deref_ 연산자가 발견되었습니다.
C28303 주석에서 모호한 _Deref_ 연산자가 발견되었습니다.
C28304 잘못 배치된 _Notref_ 연산자가 토큰에 적용된 것을 발견했습니다.
C28305 토큰을 구문 분석하는 동안 오류가 발생했습니다.
C28306 매개 변수의 주석이 더 이상 사용되지 않습니다.
C28307 매개 변수의 주석이 더 이상 사용되지 않습니다.
C28350 주석이 조건부로 적용할 수 없는 상황을 설명합니다.
C28351 주석이 동적 값(변수)을 조건에 사용할 수 없는 경우를 설명합니다.
CA1001 삭제 가능한 필드가 있는 형식은 삭제 가능해야 합니다.
CA1009 이벤트 처리기를 제대로 선언하십시오.
CA1016 AssemblyVersionAttribute로 어셈블리 표시
CA1033 인터페이스 메서드는 자식 형식에서 호출할 수 있어야 합니다.
CA1049 네이티브 리소스가 있는 형식은 삭제 가능해야 합니다.
CA1060 P/Invoke를 NativeMethods 클래스로 이동
CA1061 기본 클래스 메서드를 숨기지 마십시오.
CA1063 IDisposable을 올바르게 구현하십시오.
CA1065 예기치 않은 위치에서 예외를 발생시키지 마십시오.
CA1301 중복 액셀러레이터 키를 사용하지 마십시오.
CA1400 P/Invoke 진입점이 있어야 합니다.
CA1401 P/Invoke는 노출되지 않아야 합니다.
CA1403 자동 레이아웃 형식은 COM 노출이면 안 됩니다.
CA1404 P/Invoke 다음에 바로 GetLastError를 호출하십시오.
CA1405 COM 노출 형식의 기본 형식은 COM 노출이어야 합니다.
CA1410 COM 등록 메서드는 일치해야 합니다.
CA1415 P/Invoke를 올바르게 선언하십시오.
CA1821 빈 종료자를 제거하십시오.
CA1900 값 형식 필드는 이식 가능해야 합니다.
CA1901 P/Invoke 선언은 이식 가능해야 합니다.
CA2002 약한 ID를 가진 개체를 잠그지 마십시오.
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 투명 메서드는 LinkDemands를 충족해서는 안 됩니다
CA2146 형식은 기본 형식 및 인터페이스 이상으로 중요해야 합니다.
CA2147 투명 메서드는 보안 어설션을 사용할 수 없습니다.
CA2149 투명 메서드는 네이티브 코드를 호출해서는 안 됩니다.
CA2200 스택 정보를 유지하도록 다시 throw하십시오.
CA2202 개체를 여러 번 삭제하지 마십시오.
CA2207 값 형식 정적 필드 인라인을 초기화하십시오.
CA2212 서비스 구성 요소를 WebMethod를 사용하여 표시하지 마십시오.
CA2213 삭제 가능한 필드는 삭제해야 합니다.
CA2214 재정의 가능한 메서드를 생성자에서 호출하지 마십시오.
CA2216 삭제 가능한 형식은 종료자를 선언해야 합니다.
CA2220 종료자는 기본 클래스 종료자를 호출해야 합니다.
CA2229 serialization 생성자를 구현하십시오.
CA2231 ValueType.Equals를 재정의할 때 같음 연산자를 오버로드하십시오.
CA2232 Windows Forms 진입점을 STAThread를 사용하여 표시하십시오.
CA2235 모두 serialize할 수 없는 필드로 표시하십시오.
CA2236 ISerializable 형식에서 기본 클래스 메서드를 호출하십시오.
CA2237 SerializableAttribute로 ISerializable 형식 표시
CA2238 serialization 메서드를 올바르게 구현하십시오.
CA2240 ISerializable을 올바르게 구현하십시오.
CA2241 서식 지정 메서드에 올바른 인수를 제공하십시오.
CA2242 NaN에 대해 정확하게 테스트하십시오.