다음을 통해 공유


Visual Studio 코드 분석으로 Windows 스토어 앱의 C++ 코드 품질 분석

Microsoft Visual Studio Express 2012 for Windows 8의 코드 분석 도구는 코드에 일련의 일반적인 문제 및 바람직한 프로그래밍 습관 위반이 있는지 검사합니다.코드 분석 시 올바르지만 해당 코드를 사용하는 당사자나 다른 사용자에게 문제를 일으킬 수 있는 특정 코드 패턴을 검색하므로 코드 분석 경고는 컴파일러 오류 및 경고와 다릅니다.코드 분석 시 테스트를 통해 검색하기 힘든 코드 오류도 찾을 수 있습니다.개발 프로세스에서 코드 분석 도구를 정기적으로 실행하면 완성된 응용 프로그램의 품질을 향상시킬 수 있습니다.

참고

Visual Studio Ultimate 2012, Visual Studio Premium 2012 및 Visual Studio Professional 2012에서는 전체 코드 분석 기능을 사용할 수 있습니다.MSDN 라이브러리의 코드 분석 도구를 사용하여 응용 프로그램 품질 분석을 참조하십시오.

항목 내용

다음 내용을 배울 수 있습니다.

코드 분석 실행

코드 분석 경고 분석 및 해결

코드 분석 경고 표시하지 않기

코드 분석 결과 검색 및 필터링

C++ 코드 분석 경고

코드 분석 실행

Visual Studio 솔루션에서 코드 문석을 실행하려면 다음을 수행합니다.

  • 빌드 메뉴에서 솔루션에서 코드 분석 실행을 선택합니다.

프로젝트를 빌드할 때마다 자동으로 코드 분석을 실행하려면 다음을 수행합니다.

  1. 솔루션 탐색기에서 프로젝트 이름을 선택한 다음 속성을 선택합니다.

  2. 프로젝트 속성 페이지에서 코드 분석을 선택한 다음 빌드할 때 C/C++에 코드 분석 사용을 선택합니다.

솔루션이 컴파일되고 코드 분석이 실행됩니다.코드 분석 창에 결과가 나타납니다.

코드 분석 창

코드 분석 경고 분석 및 해결

특정 경고를 분석하려면 코드 분석 창에서 경고 제목을 선택합니다.경고가 확장되어 문제에 대한 자세한 정보가 표시됩니다.가능한 경우 코드 분석 시 경고를 발생시킨 분석 논리 및 줄 번호가 표시됩니다.

확장된 코드 분석 경고

경고를 확장하면 Visual Studio 코드 편집기에서 경고를 발생시킨 코드 줄이 강조 표시됩니다.

강조 표시된 소스 코드

문제를 파악한 후 코드에서 문제를 해결할 수 있습니다.그런 다음 코드 분석을 다시 실행하여 코드 분석 창에 더 이상 경고가 나타나지 않는지와 수정으로 인해 새로운 경고가 발생하지 않는지 확인합니다.

코드 분석 창에서 코드 분석을 다시 실행할 수 있습니다.분석 단추를 선택한 다음 분석 범위를 선택합니다.전체 솔루션 또는 선택한 프로젝트에 대한 분석을 다시 실행할 수 있습니다.

코드 분석 경고 표시하지 않기

코드 분석 경고를 수정하지 않도록 결정하는 경우가 있습니다.경고를 해결하려면 코드의 실제 구현에서 문제가 발생할 가능성과 관련하여 너무 많은 기록이 필요하다고 판단할 수 있습니다.또는 경고에 사용되는 분석이 특정 컨텍스트에 적절하지 않다고 판단할 수도 있습니다.코드 분석 창에 개별 경고가 나타나지 않도록 개별 경고를 표시하지 않을 수 있습니다.

경고를 표시하지 않으려면 다음을 수행합니다.

  1. 자세한 정보가 표시되지 않으면 경고 제목을 확장합니다.

  2. 경고 아래쪽에서 작업 링크를 선택합니다.

  3. 메시지 표시 안 함을 선택한 다음 소스를 선택합니다.

메시지를 표시하지 않으면 코드 줄에 대한 경고를 표시하지 않는 #pragma(warning:WarningId)가 삽입됩니다.

코드 분석 결과 검색 및 필터링

긴 경고 메시지 목록을 검색하고 다중 프로젝트 솔루션에서 경고를 필터링할 수 있습니다.

코드 분석 검색 및 필터 창

C++ 코드 분석 경고

코드 분석 시 C++ 코드에 대한 다음과 같은 경고가 발생합니다.

규칙

설명

C6001

초기화되지 않은 메모리 사용

C6011

Null 포인터 역참조

C6029

확인되지 않은 값 사용

C6053

호출의 0 종료

C6059

잘못된 연결

C6063

Format 함수에 문자열 인수 없음

C6064

Format 함수에 정수 인수 없음

C6066

Format 함수에 포인터 인수 없음

C6067

Format 함수에 문자열 포인터 인수 없음

C6101

초기화되지 않은 메모리 반환 중

C6200

인덱스가 버퍼 최대값을 초과함

C6201

인덱스가 스택 버퍼 최대값을 초과함

C6270

Format 함수에 부동 인수 없음

C6271

Format 함수의 추가 인수

C6272

Format 함수의 비부동 인수

C6273

Format 함수의 비정수 인수

C6274

Format 함수의 비문자 인수

C6276

잘못된 문자열 캐스팅

C6277

잘못된 CreateProcess 호출

C6284

Format 함수의 개체 인수 잘못됨

C6290

논리 부정 비트 AND 우선 순위

C6291

논리 부정 비트 OR 우선 순위

C6302

Format 함수에 대한 잘못된 문자열 인수

C6303

Format 함수에 대한 잘못된 와이드 문자열 인수

C6305

크기 및 개수 사용 불일치

C6306

잘못된 변수 인수 함수 호출

C6328

잠재적 인수 형식 불일치

C6385

읽기 오버런

C6386

쓰기 오버런

C6387

잘못된 매개 변수 값

C6500

잘못된 특성 속성

C6501

특성 속성 값 충돌

C6503

참조는 null일 수 없음

C6504

비포인터에 대한 Null

C6505

Void에 대한 MustCheck

C6506

비포인터 또는 배열에 대한 버퍼 크기

C6507

역참조 0에서 Null 불일치

C6508

상수에 대한 쓰기 액세스

C6509

사전 조건에서 반환이 사용됨

C6510

비포인터에 대한 Null 종료

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

주석에 대해 예기치 않은 주석 오류가 발생했습니다.

C28021

주석이 추가된 매개 변수는 포인터여야 합니다.

C28182

NULL 포인터를 역참조하고 있습니다.포인터에 다른 포인터에 포함된 것과 동일한 NULL 값이 있습니다.

C28202

비정적 멤버에 대한 잘못된 참조입니다.

C28203

클래스 멤버에 대한 모호한 참조입니다.

C28205

_Success_ 또는 _On_failure_가 잘못된 컨텍스트에서 사용되었습니다.

C28206

왼쪽 피연산자가 구조체를 가리킵니다. '->'를 사용하세요.

C28207

왼쪽 피연산자가 구조체를 가리킵니다. '.'를 사용하세요.

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

매개 변수의 주석에 param2는 있는데 param1이 없습니다.

C28241

매개 변수의 함수에 대한 주석을 인식할 수 없습니다.

C28243

매개 변수의 함수에 대한 주석에 실제 형식 주석이 허용하는 것보다 많은 역참조가 필요합니다.

C28245

함수에 대한 주석에서 멤버가 아닌 함수에 'this'를 주석으로 추가합니다.

C28246

함수에 대한 매개 변수 주석이 매개 변수의 형식과 일치하지 않습니다.

C28250

함수에 대한 주석이 일치하지 않습니다. 이전 인스턴스에 오류가 있습니다.

C28251

함수에 대한 주석이 일치하지 않습니다. 이 인스턴스에 오류가 있습니다.

C28252

함수에 대한 주석이 일치하지 않습니다. 매개 변수의 이 인스턴스에 다른 주석이 있습니다.

C28253

함수에 대한 주석이 일치하지 않습니다. 매개 변수의 이 인스턴스에 다른 주석이 있습니다.

C28254

dynamic_cast<>()는 주석에서 지원되지 않습니다.

C28262

함수에서 주석에 대한 주석 구문 오류를 찾았습니다.

C28263

내장 주석에 대한 조건부 주석에서 구문 오류를 찾았습니다.

C28264

결과 목록 값은 상수여야 합니다.

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

deref 수준 0의 post null/notnull은 함수에서 의미가 없습니다.

C28300

연산자에 대한 호환되지 않는 형식의 식 피연산자입니다.

C28301

함수의 첫 번째 선언에 대한 주석이 없습니다.

C28302

주석에 추가 _Deref_ 연산자가 있습니다.

C28303

주석에 모호한 _Deref_ 연산자가 있습니다.

C28304

토큰에 부적절하게 배치된 _Notref_ 연산자가 적용되었습니다.

C28305

토큰을 구문 분석하는 동안 오류가 발견되었습니다.

C28350

주석이 조건부로 적용할 수 없는 상황을 설명합니다.

C28351

주석이 동적 값(변수)을 조건에 사용할 수 없는 위치를 설명합니다.