IRC_SERVER
By @hyunjunk (hyunjun2372@gmail.com)
|
Null
이 허용되지 않습니다.Null
이 허용됩니다. Assert
및 STATIC_ASSERT
를 모든 곳에 사용합니다.assert
와 static_assert
대신 별도로 구현한 Assert(exp)
, STATIC_ASSERT(exp)
를 사용합니다.const
를 최대한 사용합니다.const
키워드를 붙입니다.#include <>
을 항상 #include ""
보다 위에 작성합니다.struct
나 class
에서 값 변경을 막기 위해 변수를 const
나 참조(&)
로 선언하지 않습니다.Magic Number
가 없도록 상수 변수나 enum
, #define
을 사용합니다.struct
로 매개변수를 전달합니다.NULL
이나 널 문자를 조건문으로 확인할 땐 if (retAddr == NULL)
처럼 명확히 표기합니다.new
에 대해 실패하는 경우는 검사하지 않고 의도적으로 Crach
를 발생시킵니다.예외
를 던지지 않습니다.delete
이후 곧바로 NULL
을 대입합니다.private
, protected
로 선언하거나 namespace::detail
등으로 숨깁니다. NULL
을 사용하거나 out
매개변수를 사용할 일이 없다면 매개변수는 항상 &
(레퍼런스)를 사용합니다.Tab
이 아닌 Space
를 사용합니다. (4칸)struct
, enum
예외) *
)나 레퍼런스 기호(&
)는 자료형에 붙입니다. Initialize List
는 한 줄에 하나의 변수만 초기화 하도록 작성합니다. Iterator
에 대한 증감문은 전위 연산자를 사용합니다. #define
을 활용한 include guard
대신 #pragma once
를 사용합니다.<
,>
와 자료형 사이에 공백을 추가합니다. namespace
는 들여쓰기를 하지 않습니다. Class
와 Struct
, Enum
은 파스칼 포기법을 따릅니다. (ex. HumanFactory, ComposeUnit)
(ex. numArray, buffRecvBytes)
public
함수는 파스칼 표기법을 따릅니다.private
함수는 카멜 표기법을 따릅니다.m
으로 시작해야 합니다. (ex. mSize, mServerPort)
#define
으로 정의된 상수는 대문자로 쓰되 밑줄로 단어를 구분합니다. (ex. REG_PORT_MAX)
bool
으로 정의된 변수는 변수 이름을 b
로 시작합니다. (ex. bIsEmpty, mbExpired)
I
로 시작합니다. (ex. ICharacter)
Null
이 허용된다면 해당 매개변수 이름은 Opt
로 끝납니다.out
으로 시작합니다. 반환하는 값이 포인터일 경우에는 outPtr
로 시작합니다. Recursive
로 끝납니다.동사
로 시작합니다. (ex. SearchPosition(), GetIndex())
goto
문의 라벨 이름은 대문자로 쓰되 밑줄로 단어를 구분합니다. (ex. CLEANUP_ARGS:, END_SEARCH_LOOP:)
enum class
의 이름은 E
로 시작합니다. (ex. EColor, EState)
File Descriptor
이나 Handle
은 변수 이름 앞에 h
를 붙입니다. (ex. hFile, hSocket)
Event
는 변수 이름 앞에 ev
를 붙입니다. (ex. evShutdown, evComplete)
**public
이 아닌 protected
나 private
입니다. 해당 프로젝트는 Javadoc
의 주석 스타일을 따릅니다.
프로젝트는 doxygen
을 사용하여 문서화 됩니다.
@brief
) 입니다.) /**
, */
를 사용하여 바로 위에 작성합니다. //
를 사용하여 작성합니다. /**
, */
를 사용하여 작성합니다. //<
는 해당 줄의 주석이 다음 줄의 코드에 대한 주석임을 나타냅니다. ///@{
와 ///@}
를 사용하여 그룹을 나타냅니다. switch
문의 default
에 도달할 일이 없다면 Assume(0)
을 기입하여 컴파일러 최적화 힌트를 제공합니다.Assert
문은 Release
빌드에서 Assume
으로 치환되어 컴파일러 최적화 힌트를 제공합니다.함수 결과를 리턴할 때 RVO
나 NRVO
를 위해
하나의 return
문 만 사용하거나 하나의 변수만 return
하도록 작성합니다.
new
와 delete
를 메모리풀로 직접 구현하여 사용합니다.SIMD
와 특수화
를 위해 특정 사이즈 단위의 정렬/연산을 사용합니다. (ex. _memset128()
, _memcpy256_aligned()
, for(; i < n; i += 256)
)SIMD
와 컴파일러 최적화를 위해 2의 거듭제곱 수
를 적극적으로 사용합니다.std::vector
와 같은 컨테이너를 사용할 경우, 선언 후 곧바로 reserve
를 호출하여 사용할 크기를 한 번에 할당합니다.