rein's world

C++ style guide - from google, from naver

C++ 은 이미 수십년째 사용되고 있는 언어지만, 많은 분야에서 work-horse로 사용되고 있다. 그렇지만 수십년의 역사가 담겨 있고, 원래 시스템 프로그래밍 언어였던 C의 확장으로 만들어졌기에, 저레벨의 포인터 연산부터, 고레벨의 템플릿 메타 프로그래밍 류에 이르기까지 매우 많은 영역을 다루고 있다. 덕분에 이를 적당히 제약하고, 많은 프로그래머(?)들이 읽을 수 있게 스타일 가이드를 정해서 사용하는 회사가 많다.

널리 알려진 스타일 가이드 중 하나는 Google 에서 제공하는게 있다.https://google.github.io/styleguide/cppguide.html 에서 찾아볼 수 있는데, 이를 검증(?)하는 python 체커인 cpplint.py도 같이 제공한다.

오늘 트위터에서, @javawork 님이 “Naver 개발자 센터에 공개된 C++ 스타일 가이드를 소개”1해주셨길래 좀 비교해본다.

개략적인 소감은, 구글의 가이드가 좀 더 strict 하다. 그리고 좀 더 세세하다. Google 의 가이드 카테고리는 총 70여개, 네이버의 가이드라인은 총 45개의 룰로 되어있다. 사실 이건 구글 가이드에서는 C++ 자체에 대한 것 말고도, boost 에서는 어떤 라이브러리들이 허용되는지, 네이밍은 어때야하는 지 등도 다루고 있어서 그런듯 싶다. 게다가 좀 더 strict하고 *nix 문화적인 면도 보인다.

Google guide의 경우 column 제한도 80인데(이건 *nix 터미널에서 흔함), Naver guide인 경우 120이다. 그리고 header-guard 의 경우에도, Google에서는 #ifndef ~ #endif 를 쓸 것을 권장한다. 이는 사실 #pragma once 가  *nix 계열에선 symbolic link 등으로 오동작할 수 있기에 그런 면도 있다.

상반되는 부분도 있는데, Google guide는 한 가지로 통일되어 있다. 반면에 Naver guide는 *nix/Windows를 구분하는 부분도 있고, 탭/스페이스를 선택하게 하는 부분도 있다. 그리고 {, } 의 위치에 대해서도 양자가 다른 선택을 한다.

개인적인 의견은 둘 중 맘에 드는걸 골라잡아서 적당히 옵션주고 추가하거나 빼서 쓰라는 건데 – python 이니 수정하기도 쉽다 – Naver C++ style guide는 공개되서 얼마 안되서 그런지 좀 옵션이 귀찮다. 파일에 직접 넣는 수밖에 없으니. 반대로 좀 된 Google C++ style guide는 커맨드라인 옵션으로도 이를 지정할 수 있어서 CI 툴 같은데 통합하긴 편할듯도 싶다;

근데 어느 쪽을 쓰던간에, 초기 도입 비용은 좀 있을게다; cpplint.py 를 회사에서 돌려보니 500줄짜리 파일 하나에 에러가 300개씩 뜨고 그러던데 Orz. 이건 사실 중괄호 규약이 나랑 정 반대라서 그렇긴하지만;;;

여튼; C++ 자체가 복잡성이 많은 언어라서, 사용하는 곳에 따라 적당한 스타일 가이드를 정하고, 이를 강제하는 것 자체는 찬성한다. 그런 의미에서 네이버 쪽의 스타일 가이드나 구글쪽 가이드를 적당히 골라서 수정해서 쓰면(…) 좋을 듯 하긴하다.


  1. 2023년 8월 현재 링크가 동작하지 않아서 제거했다. ↩︎