C++ - Core Guidelines Checker와 GSL 도입

출처

시작하기

C++ Core Guidelines Checker는?
주로 Bjarne Stroustrup과 Herb Sutter에 의한 C++ Core Guidelines는 더 나은 C++ 코드를 작성하는데 필요한 지침이 정비 되어 있다. 이 지침의 많은 항목은 분석 도구를 통해 확인 가능하도록 쓰여져 있다.

C++ Core Guidelines Checker는 C++ Core Guidelines 항목을 기반으로 하는 C++ 정적 분석 도구이다.
Microsoft에서 개발 되었으며, Visual Studio 2017이면 기본적으로 사용할 수 있다. ( 추기 :이 도구 이외에도 clang-tidy도 있다)
이 도구는 빌드 할 때 위반하는 코드에 대해서 Error List 창에 warning을 출력한다.
어떤 사건에 대해 어떤 warning을 출력하거나는 Visual Studio C++ Core Guidelines Checker Reference | Microsoft Docs에 적혀 있다.

2018년 5월 현재 C++ Core Guidelines Checker는 Windows의 Visual Studio에서만 작동한다.

GSL은?

GSL(Guidelines Support Library)은 C++ Core Guidelines에서 사용한다고 정해진 타입이나 함수를 포함하는 라이브러리이다. 어떤 타입이나 함수가 있는지에 대해서는 아래 글을 참고 하기 바란다.
C++ Core Guideline : The Guideline Support Library - ModernesCpp.com

GSL은 복수의 구현이 있지만이 문서에서는 Microsoft에서 구현한 것(Microsoft/GSL)을 다룬다.

또한 GSL은 여러 컴파일러를 지원하고 있다.

도입 방법

C++ Core Guidelines Checker를 사용하기

Visual Studio의 Project 마다, C++ Core Guidelines Checker 설정을 한다. 사용하는 구체적인 방법이나 일부 warning을 해제하는 설정 등은 다음 페이지에 나와 있으니 참고하기 바란다.

  • [Using the C ++ Core Guidelines checkers Microsoft Docs](https://docs.microsoft.com/en-us/visualstudio/code-quality/using-the-cpp-core-guidelines-checkers )
  • [C++ Core Guidelines Checker in Visual Studio 2017 Visual C ++ Team Blog](https://blogs.msdn.microsoft.com/vcblog/2017/08/11/c-core-guidelines-checker-in-visual-studio-2017/ )
  • [Managing warnings in the C ++ Core Guidelines Checker Visual C ++ Team Blog](https://blogs.msdn.microsoft.com/vcblog/2017/08/14/managing-warnings-in-the-c-core-guidelines-checker/ )

GSL 코드를 복사-붙여 넣기

Microsoft/GSL의 README에 쓰여져 있듯이, gsl 폴더를 복사-붙여넣기로 가져온다.

GSL의 wrapper를 생성

현재의 C++ Core Guidelines Checker는 자신이 작성한 코드 이외에도 타사 라이브러리의 코드에 대해서도 warning을 출력한다.(이 동작은 문제가 되고 있으며, Microsoft도 해결하려고 하는 것 같다)
구체적으로는 GSL을 사용하면 GSL 코드에 대한 warning을 출력한다.
이것으로는 검사 해 주기 바라는 자신의 코드에 대한 warning이 묻혀 버리기 때문에, GSL 코드를 검사에서 제외하기 위해, GSL의 wrapper를 생성하고 이것을 통해 사용할 수 있다.

GSL의 wrapper는 아래의 코드이다. _MSC_VER에서 ifdef 하는 이유는 CppCoreCheck/warnings.h 가 Visual Studio 2017 설치 시 생성되는 파일인 것을 #pragma 지시어로 warning을 disable 하는 방법이 MSVC 특유의 것이기 때문이다.

gsl_wrapper.h

#ifdef _MSC_VER
#if _MSC_VER >= 1910
#include <CppCoreCheck/warnings.h>
#pragma warning(disable: ALL_CPPCORECHECK_WARNINGS)
#endif // _MSC_VER >= 1910
#endif // _MSC_VER


#include <gsl/gsl>


#ifdef _MSC_VER
#if _MSC_VER >= 1910
#pragma warning(default: ALL_CPPCORECHECK_WARNINGS)
#endif // _MSC_VER >= 1910
#endif // _MSC_VER

샘플 코드

이상의 도입 방법을 취하면 아래의 GitHub repository와 같은 구성이 될 것이다.
https://github.com/TomoyukiAota/CoreCheckerAndGsl


이 글은 2020-02-25에 작성되었습니다.