혼합 권장 규칙 규칙 집합
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에 대해 정확하게 테스트하십시오. |
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기