C/C++용 코드 분석 경고

업데이트: 2007년 11월

이 단원에서는 C6000부터 C6999까지의 범위에 속하는 C/C++ 코드 분석 경고를 제공합니다.

단원 내용

경고 번호

설명

C6001

경고 C6001: 초기화되지 않은 메모리 <variable>을(를) 사용하고 있습니다.

C6011

경고 C6011: NULL 포인터 <name>을(를) 역참조하고 있습니다.

C6029

경고 C6029: <function>을(를) 호출할 때 버퍼 오버런이 발생할 수 있습니다. 검사되지 않은 값을 사용했습니다.

C6031

경고 C6031: 반환 값이 무시되었습니다. <function>에서 예기치 않은 값을 반환할 수 있습니다.

C6053

경고 C6053: <function>에 대한 호출에서 <variable> 문자열이 0으로 종료되지 않을 수 있습니다.

C6054

경고 C6054: <variable> 문자열이 0으로 종료되지 않을 수 있습니다.

C6057

경고 C6057: <function>에 대한 호출에서 문자 수/바이트 수가 일치하지 않아 버퍼 오버런이 발생했습니다.

C6059

경고 C6059: <function>에 대한 호출에서 길이 매개 변수가 잘못되었습니다. <variable>의 버퍼 크기가 아니라 남은 문자 수를 전달하십시오.

C6063

경고 C6063: 변환 지정자 <number>에 해당하는, <function>에 대한 문자열 인수가 없습니다.

C6064

경고 C6064: 변환 지정자 <number>에 해당하는, <function>에 대한 정수 인수가 없습니다.

C6066

경고 C6066: 포인터가 아닌 항목이 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 포인터가 필요합니다.

C6067

경고 C6067: <function>에 대한 호출에서 매개 변수 <number>은(는) 문자열의 주소여야 합니다.

C6200

경고 C6200: 인덱스 <name>이(가) 비스택 버퍼 <variable>에 대해 유효한 인덱스 범위 <min> - <max>을(를) 벗어납니다.

C6201

경고 C6201: 스택에 할당되었을 가능성이 있는 <variable>에 대해 버퍼 오버런이 발생했습니다. 인덱스 <name>이(가) 유효한 인덱스 범위 <min> - <max>을(를) 벗어납니다.

C6202

경고 C6202: <function>에 대한 호출에서 스택에 할당되었을 가능성이 있는 <variable>에 대해 버퍼 오버런이 발생했습니다. 길이 <size>이(가) 버퍼 크기 <max>을(를) 초과합니다.

C6203

경고 C6203: <function>에 대한 호출에서 버퍼 <variable>에 대해 버퍼 오버런이 발생했습니다. 길이 <size>이(가) 버퍼 크기를 초과합니다.

C6204

경고 C6204: <function>에 대한 호출에서 버퍼 오버런이 발생할 수 있습니다. 검사되지 않은 매개 변수 <variable>을(를) 사용했습니다.

C6209

경고 C6209: <function>에 대한 호출에서 'sizeof<variable1>'을(를) 매개 변수 <number>(으)로 사용합니다. <variable2>은(는) 와이드 문자 배열일 수 있습니다. 바이트 수 대신 문자 수를 사용하려고 했습니까?

C6211

경고 C6211: 예외로 인해 <pointer> 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.

C6214

경고 C6214: 의미 체계가 다른 정수 형식 간의 캐스팅입니다. HRESULT에서 부울로 캐스팅했습니다.

C6215

경고 C6215: 의미 체계가 다른 정수 형식 간의 캐스팅입니다. 부울 형식에서 HRESULT로 캐스팅했습니다.

C6216

경고 C6216: 의미 체계가 다른 정수 계열 형식 간의 컴파일러 삽입 캐스팅입니다. 부울 형식에서 HRESULT로 캐스팅했습니다.

C6217

경고 C6217: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. 'not'을 사용하여 HRESULT를 테스트하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.

C6219

경고 C6219: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT를 1 또는 TRUE와 비교하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.

C6220

경고 C6220 - 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT를 -1과 비교하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.

C6221

경고 C6221: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT를 정수와 비교하고 있습니다. SUCCEEDED 또는 FAILED 매크로를 대신 사용하십시오.

C6225

경고 C6225: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT에 1 또는 TRUE를 할당하고 있습니다. S_FALSE를 대신 사용하십시오.

C6226

경고 C6226: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. HRESULT에 -1을 할당하고 있습니다. E_FAIL을 대신 사용하십시오.

C6230

경고 C6230: 의미 체계가 다른 정수 형식 간의 암시적 캐스팅입니다. 부울 컨텍스트에서 HRESULT를 사용하고 있습니다.

C6235

경고 C6235: (<non-zero constant> || <expression>)은(는) 언제나 0이 아닌 상수입니다.

C6236

경고 C6236: (<expression> || <non-zero constant>)은(는) 언제나 0이 아닌 상수입니다.

C6237

경고 C6237: (<zero> && <expression>)은(는) 언제나 0입니다. <expression>은(는) 평가되지 않으므로 의도하지 않은 결과가 발생할 수 있습니다.

C6239

경고 C6239: (<non-zero constant> && <expression>)은(는) 언제나 <expression>의 결과로 평가됩니다. 비트 AND 연산자를 사용하려고 했습니까?

C6240

경고 C6240: (<expression> && <non-zero constant>)은(는) 언제나 <expression>의 결과로 평가됩니다. 비트 AND 연산자를 사용하려고 했습니까?

C6242

경고 C6242: 이 try 블록 밖으로 점프하면 로컬 해제가 발생하여 성능에 심각한 영향을 미칠 수 있습니다.

C6244

경고 C6244: <variable>의 지역 선언이 <file>의 <line>에 있는 이전 선언을 숨깁니다.

C6246

경고 C6246: <variable>의 지역 선언이 외부 범위에 있는 같은 이름의 선언을 숨깁니다. 추가 정보: <location>에 있는 이전 선언을 참조하십시오.

C6248

경고 C6248: SECURITY_DESCRIPTOR의 DACL을 NULL로 설정하면 보호되지 않는 개체가 만들어질 수 있습니다.

C6250

경고 C6250: MEM_RELEASE 플래그 없이 <function> VirtualFree를 호출하면 메모리는 비워지지만 주소 설명자(VAD)는 그대로 남아 주소 공간 누수가 발생합니다.

C6255

경고 C6255: _alloca는 스택 오버플로 예외를 발생시켜 실패를 나타냅니다. 대신 _alloca_s를 사용하십시오.

C6258

경고 C6258: TerminateThread를 사용하면 스레드가 제대로 정리되지 않습니다.

C6259

경고 C6259: 레이블이 있는 코드에 접근할 수 없습니다. switch-expr의 (<expression> & <constant>)은(는) <case-label>(으)로 평가되지 않습니다.

C6260

경고 C6260: sizeof * sizeof의 결과는 거의 언제나 정확하지 않습니다. 문자 수 또는 바이트 수를 사용하려고 했습니까?

C6262

경고 C6262: 함수에서 <constant>바이트의 스택을 사용하는데 이 크기가 /analyze:stacksize<constant>을(를) 초과합니다. 일부 데이터를 힙으로 이동하십시오.

C6263

경고 C6263: 루프에서 _alloca를 사용하고 있습니다. 이 경우 빠른 시간 내에 스택 오버플로가 발생할 수 있습니다.

C6268

경고 C6268: (<TYPE1>)(<TYPE2>)x + y의 연산 순서가 잘못되었습니다. (<TYPE1>)((<TYPE2>)x + y)에서 괄호가 누락된 것 같습니다.

C6269

경고 C6269: 연산 순서가 잘못된 것 같습니다. 역참조가 무시되었습니다.

C6270

경고 C6270: <function>에 float 인수가 없습니다. 변환 지정자 <number>에 해당하는 float 인수를 추가하십시오.

C6271

경고 C6271: <function>에 불필요한 인수가 전달되었습니다. 매개 변수 <number>은(는) 형식 문자열에서 사용되지 않습니다.

C6272

경고 C6272: float가 아닌 항목이 인수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 float가 필요합니다.

C6273

경고 6273 - 정수가 아닌 항목이 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 정수가 필요합니다. 포인터 값이 전달되는 경우 %p을(를) 사용해야 합니다.

C6274

경고 C6274: 문자가 아닌 항목이 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 문자가 필요합니다.

C6276

경고 C6276: 의미 체계가 다른 문자열 형식 간의 캐스팅입니다. char*를 wchar_t*로 캐스팅했습니다. 잘못된 문자열을 사용하면 정의되지 않은 동작이 발생할 수 있습니다.

C6277

경고 C6277: <function>에 대한 호출에서 따옴표가 없는 경로와 함께 NULL 응용 프로그램 이름을 사용했습니다. 이 경우 경로에 공백이 포함되어 있으면 보안 문제가 발생할 수 있습니다.

C6278

경고 C6278: <variable>이(가) 배열 new []를 사용해 할당되었지만 스칼라 delete로 삭제되었으므로 소멸자가 호출되지 않습니다.

C6279

경고 C6279: <variable>이(가) 스칼라 new를 사용해 할당되었지만 배열 delete []로 삭제되었습니다.

C6280

경고 C6280: <variable>이(가) <function>(을)를 사용해 할당되었지만 <function>(으)로 삭제되었습니다.

C6281

경고 6281 - 연산 순서가 잘못되었습니다. 관계형 연산자는 비트 연산자보다 우선 순위가 높습니다.

C6282

경고 C6282: 잘못된 연산자: 부울 컨텍스트에서 상수를 할당했습니다. 대신 '=='를 사용하십시오.

C6283

경고 C6283: <variable>이(가) 배열 new []를 사용해 할당되었지만 스칼라 delete로 삭제되었습니다.

C6284

경고 C6284: 개체가 매개 변수 '%d'(으)로 전달되었습니다. <function>에 대한 호출에는 문자열이 필요합니다.

C6285

경고 C6285: (<non-zero constant> || <non-zero constant>)은(는) 언제나 0이 아닌 상수입니다. 비트 AND 연산자를 사용하려고 했습니까?

C6286

경고 C6286: (<non-zero constant> || <expression>)은(는) 언제나 0이 아닌 상수입니다. <expression>은(는) 평가되지 않으므로 의도하지 않은 결과가 발생할 수 있습니다.

C6287

경고 C6287: 코드가 중복됩니다. 왼쪽 부분식과 오른쪽 부분식이 동일합니다.

C6288

경고 C6288: 잘못된 연산자: &&로 상호 포함하면 언제나 0이 됩니다. ||를 사용하려고 했습니까?

C6289

경고 C6289: 잘못된 연산자: ||로 상호 제외하면 언제나 0이 아닌 상수가 됩니다. &&를 사용하려고 했습니까?

C6290

경고 C6290: 논리적 결과에 대해 비트 연산을 수행했습니다. !는 &보다 우선 순위가 높습니다. 대신 && 또는 (!(x & y))를 사용하십시오.

C6291

경고 C6291: 논리적 결과에 대해 비트 연산을 수행했습니다. !는 |보다 우선 순위가 높습니다. 대신 || 또는 (!(x | y))를 사용하십시오.

C6292

경고 C6292: for 루프가 잘못 정의되었습니다. 최대값부터 위로 계산됩니다.

C6293

경고 C6293: for 루프가 잘못 정의되었습니다. 최소값부터 아래로 계산됩니다.

C6294

경고 C6294: for 루프가 잘못 정의되었습니다. 초기 조건이 충족되지 않으므로 루프 본문이 실행되지 않습니다.

C6295

경고 C6295: for 루프가 잘못 정의되었습니다. <variable> 값의 범위는 "min" - "max"입니다. 무한 루프가 발생합니다.

C6296

경고 C6296: for 루프가 잘못 정의되었습니다. 루프 본문이 한 번만 실행됩니다.

C6297

경고 C6297: 산술 연산 오버플로가 발생했습니다. 32비트 값이 이동된 후 64비트 값으로 캐스팅되었습니다. 결과가 예상과 다를 수도 있습니다.

C6298

경고 C6298: 읽기 전용 문자열 <pointer>을(를) 쓰기 가능한 문자열 인수로 사용하고 있습니다. 이렇게 하면 정적 읽기 전용 메모리에 쓰려고 시도하여 무작위 충돌이 발생할 수 있습니다.

C6299

경고 C6299: 명시적으로 비트 필드를 부울 형식과 비교하면 예기치 않은 결과가 발생할 수 있습니다.

C6302

경고 C6299: 명시적으로 비트 필드를 부울 형식과 비교하면 예기치 않은 결과가 발생할 수 있습니다.

C6303

경고 C6303: 형식 문자열이 일치하지 않습니다. 와이드 문자열이 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 문자열이 필요합니다.

C6305

경고 C6305: sizeof와 countof의 개수가 잠재적으로 일치하지 않을 수 있습니다.

C6306

경고 C6306: <function>에 대한 호출이 잘못되었습니다. va_list를 인수로 받는 <function>을(를) 사용하십시오.

C6308

경고 C6308: 'realloc'는 null 포인터를 반환할 수 있습니다. 'realloc'에 인수로 전달되는 <variable>에 null 포인터를 할당하면 원래 메모리 블록에서 누수가 발생할 수 있습니다.

C6309

경고 C6309: 인수 <number>이(가) null입니다. 이 인수 값은 <function>의 함수 사양과 일치하지 않습니다.

C6310

경고 C6310: 예외 필터에 잘못된 상수가 있으면 예기치 않은 동작이 발생할 수 있습니다.

C6312

경고 C6312: 무한 루프가 발생할 수 있습니다. try-except의 예외 필터 식에서 상수 EXCEPTION_CONTINUE_EXECUTION을 사용했습니다.

C6313

경고 C6313: 잘못된 연산자: 값이 0인 플래그는 비트 AND를 사용하여 테스트할 수 없습니다. 값이 0인 플래그를 찾으려면 같음 테스트를 사용하십시오.

C6314

경고 C6314: 연산 순서가 잘못되었습니다. 비트 OR는 조건식 연산자보다 우선 순위가 높습니다. 잘못된 연산 결과가 발생하지 않도록 하려면 괄호를 추가하십시오.

C6315

경고 C6315: 연산 순서가 잘못되었습니다. 비트 AND는 비트 OR보다 우선 순위가 높습니다. 잘못된 연산 결과가 발생하지 않도록 하려면 괄호를 추가하십시오.

C6316

경고 C6316: 잘못된 연산자: 테스트되는 식은 상수이고 0이 아닙니다. 비트 설정 여부를 확인하려면 비트 AND를 사용하십시오.

C6317

경고 C6317: 잘못된 연산자: 논리 부정(!)과 1의 보수(~)는 동일하게 사용할 수 없습니다.

C6318

경고 C6318: __try/__except이 잘못 정의되었습니다. 예외 필터 식에서 상수 EXCEPTION_CONTINUE_SEARCH 또는 0으로 평가되는 다른 상수를 사용했습니다. 예외 처리기 블록의 코드가 실행되지 않습니다.

C6319

경고 C6319: 테스트되는 식에 쉼표 연산자를 사용하면 의도된 대로 동작하는 경우 왼쪽 인수가 무시됩니다.

C6320

경고 C6320: 예외 필터 식이 상수 EXCEPTION_EXECUTE_HANDLER입니다. 이렇게 하면 처리하지 않을 예외를 마스킹할 수 있습니다.

C6322

경고 C6322: 빈 _except 블록입니다.

C6323

경고 6323 - 부울 형식에 산술 연산자를 사용했습니다.

C6324

경고 C6324: <function1>을(를) 잘못 사용했을 수 있습니다. <function2>을(를) 사용하려고 했습니까?

C6326

경고 C6326: 잠재적으로 상수가 또 다른 상수와 비교될 수 있습니다.

C6327

경고 C6327: 버퍼 오버런이 발생할 수 있습니다. SysAllocStringLen은 복사할 문자 수에 대한 유효성 검사 없이 <number>개 문자를 문자열 <variable>에서 복사합니다. 코드가 충돌할 수 있습니다.

C6328

경고 C6328:<type>이(가) 매개 변수 <number>(으)로 전달되었습니다. <function>에 대한 호출에는 <type>이(가) 필요합니다.

C6331

경고 C6331: 매개 변수가 잘못되었습니다. <function>과(와) 함께 MEM_RELEASE 및 MEM_DECOMMIT를 전달하면 호출이 실패합니다.

C6332

경고 C6332: 매개 변수가 잘못되었습니다. <function>에 dwFreeType 매개 변수로 0을 전달하면 호출이 실패합니다.

C6333

경고 C6333: 매개 변수가 잘못되었습니다. MEM_RELEASE 및 0이 아닌 dwSize 매개 변수를 <function>에 전달하면 호출이 실패합니다.

C6334

경고 C6334: 연산자가 있는 식에 sizeof 연산자를 사용하면 예기치 않은 결과가 발생할 수 있습니다.

C6335

경고 C6335: 프로세스 정보 핸들 <handlename>에서 누수가 발생하고 있습니다.

C6336

경고 C6336: 산술 연산자는 물음표 연산자보다 우선 순위가 높습니다. 잘못된 연산 결과가 발생하지 않도록 하려면 괄호를 사용하십시오.

C6381

경고 C6381: 종료 API <function>에는 유효한 dwReason 또는 lpMessage가 있어야 합니다.

C6383

경고 C6383: 요소 수를 바이트로 변환하여 버퍼 오버런이 발생했습니다. <function>에 대한 호출에서 매개 변수 <number>에는 요소 수를 사용해야 합니다.

C6384

경고 C6384: 포인터의 크기를 다른 값으로 나눕니다.

C6385

경고 C6385: 데이터가 잘못되었습니다. <buffer name>에 액세스하고 있습니다. 읽기 가능한 크기가 <size1>바이트임에도 불구하고 <size2>바이트를 읽을 수 있습니다. 줄: x, y

C6386

경고 C6386: 버퍼 오버런이 발생했습니다. <buffer name>에 액세스하고 있습니다. 쓰기 가능한 크기가 <size1>바이트임에도 불구하고 <size2>바이트가 기록될 수 있습니다. 줄: x, y

C6387

경고 C6387: <argument>이(가) <value>일 수 있습니다. 이 경우 <function name> 함수의 사양과 일치하지 않습니다. 줄: x, y

C6388

경고 C6388: <argument>이(가) <value>이(가) 아닐 수 있습니다. 이 경우 <function name> 함수의 사양과 일치하지 않습니다. 줄: x, y

C6400

경고 C6400: <function name>을(를) 사용하여 상수 문자열 <string name>에 대해 대/소문자를 구분하지 않는 비교를 수행하고 있습니다. 영어가 아닌 로캘에서는 예기치 않은 결과가 발생할 수 있습니다.

C6401

경고 C6401: 기본 로캘에서 <function name>을(를) 사용하여 상수 문자열 <string name>에 대해 대/소문자를 구분하지 않는 비교를 수행하고 있습니다. 영어가 아닌 로캘에서는 예기치 않은 결과가 발생할 수 있습니다.

C6500

경고 C6500: 주석이 잘못되었습니다. <name> 속성의 값이 잘못되었습니다.

C6501

경고 C6501: 주석이 충돌합니다. <name> 속성이 이전에 지정된 속성과 충돌합니다.

C6503

경고 C6503: 주석이 충돌합니다. 참조는 Null=Yes 또는 Null=Maybe로 표시할 수 없습니다.

C6504

경고 C6504: 주석이 잘못되었습니다. 속성은 포인터, 멤버 포인터 또는 배열 형식의 값에만 사용할 수 있습니다.

C6505

경고 C6505: 주석이 잘못되었습니다. MustCheck 속성은 void 형식의 값에 사용할 수 없습니다.

C6506

경고 C6506: 주석이 잘못되었습니다. <name> 속성은 포인터 또는 배열 형식의 값에만 사용할 수 있습니다.

C6507

경고 C6507: 주석이 충돌합니다. 사후 조건의 Deref=0에 있는 Null 속성은 사전 조건의 Null 속성에 대한 하위 집합이어야 합니다.

C6508

경고 C6508: 주석이 잘못되었습니다. 상수 값에는 쓸 수 없습니다.

C6509

경고 C6509: 주석이 잘못되었습니다. 'return'은 사전 조건에서 참조될 수 없습니다.

C6510

경고 C6510: 주석이 잘못되었습니다. NullTerminated 속성은 포인터 또는 배열 형식의 값에만 사용할 수 있습니다.

C6511

경고 C6511: 주석이 잘못되었습니다. MustCheck 속성은 Yes 또는 No여야 합니다.

C6512

경고 C6512: 주석이 잘못되었습니다. Valid 속성이 No인 경우 Null 속성은 Maybe여야 합니다.

C6513

경고 C6513: 주석이 잘못되었습니다. ElementSizeConst에는 추가로 크기 속성이 있어야 합니다.

C6514

경고 C6514: 주석이 잘못되었습니다. <name> 속성의 값이 배열의 크기를 초과합니다.

C6515

경고 C6515 - 주석이 잘못되었습니다. <name> 속성은 포인터 형식의 값에만 사용할 수 있습니다.

C6516

경고 C6516: 주석이 잘못되었습니다. <name> 특성에 대한 속성을 지정하지 않았습니다.

C6517

경고 C6517: 주석이 충돌합니다. ValidElementsConst 및 ValidBytesConst가 읽을 수 있는 버퍼에 지정되지 않았을 수 있습니다.

C6518

경고 C6518: 주석이 충돌합니다. WriteableElementsConst 및 WriteableBytesConst가 쓸 수 있는 버퍼에 지정되지 않았을 수 있습니다.

C6521

경고 C6521: 크기 사양이 잘못되었습니다. * 연산자는 포인터 형식에만 적용할 수 있습니다.

C6522

경고 C6522: 크기 사양이 잘못되었습니다. 식이 정수 계열 형식이어야 합니다.

C6523

경고 C6523: 크기 사양이 잘못되었습니다. <name> 매개 변수를 찾을 수 없습니다.

C6525

경고 C6525: 크기 사양이 잘못되었습니다. 속성 값이 잘못되었을 수 있습니다.

C6526

경고 C6526 - 크기 사양이 잘못되었습니다. 식이 배열이나 포인터 형식이어야 합니다.

C6530

경고 6530: <name>은(는) 인식할 수 없는 형식 문자열 스타일입니다.

C6535

경고 C6535: 버퍼의 크기는 <n>일 수 없습니다. 버퍼 크기가 max(size_t)보다 큽니다.

참고 항목

개념

안전한 코드 작성 지침

기타 리소스

C/C++ 코드 오류 검색 및 수정