1. 메크로를 사용하면 편할 수 있다.
ex)
#define PLUS_INDEX(x) uint32_t(x+1)
이렇게 정의한 후에 PLUS_INDEX(3)라는 식으로 사용하면 된다.
2. 변수의 bit수를 신경쓰자.
어느 연산에는 62bit연산 부분과 32bit 연산 부분으로 나뉘어서 사용되는 곳이 있을 수 있다.
그럴때 64bit가 32bit로 연산되는 순간에 캐스팅 혹은 변수의 할당에만 의존한다면 리틀 엔디안과 빅 엔디안의 사이에서 많은 오류가 생길 수 있다. 따라서 32bit로의 연산 이전에 미리 bit 연산을 이용해서 해놓는다면 이후에 비트의 차이로 생기는 오류는 해결할 수 있다.
3. 코드의 의미를 익히자.
(이 부분은 개인차가 있을 수 있으나, 내가 생각하기에 이해가 가기때문에 그렇게 표현하고 이해할 수 있다고 판단한다.)
int a = 0;
a = 5;
VS
int a = 5;
두개의 코드에는 의미의 차이가 존재한다.
위의 것은 a는 가변적인 변수라는 것이고, int a = 5는 a 의 값이 변하지 않을 수 있다는 의미이다.
따라서 두개의 의미를 활용해보면, 아래의 코드같이 이해할 수 있다.
int run = 5;
for( int i = 0 ; i < run ; i )
cout << " RUN " << endl;
4. 코드를 유지보수 할 경우 코딩 스타일을 유지시키자.
코드 전체의 일관성을 유지하기 위해서는 타인의 소스를 고칠때에도 본인의 코딩 스타일을 고집하지 않고 기존 소스의
일관성을 유지하는 것이 좋다.
당연히 본인이 write한 코드라면 동일한 스타일로 쭉~ 작성하자.
5. 클래스의 멤버 변수의 이름엔 prefix가 붙는 이유.
코드의 가독성을 높이기 위해서 클래스의 멤버 변수의 경우엔 앞에 m_xxx 혹은 Mxxx 등으로 표시한다.
이와 같은 코딩 컨벤션을 안할 경우 생기는 문제를 아래에서 보자.
class Test {
int data;
void setData(int data) {
data = data;
}
};
cpp의 경우 java와 같이 this가 없기 때문에 위와 같은 현상을 방지하거나 멤버 변수와 임시변수를 구분하기 위해서 prefix를 주로 사용한다.
6. 멤버 초기화를 할 때는 memset을 주로 사용한다.
만약 배열이 있다고 가정한다면, 배열에 값을 일일이 할당하면서 초기화 하지 않고 memset으로 해당 메모리에 값을 채우는 형식으로 초기화를 주로 한다.
7. 코드를 작성할때, 불필요한 코드/함수는 없애자.
코드의 존재는 항상 유지보수의 대상이 된다. 따라서 사용하지 않거나, 차후에 사용가능한 코드 등은 정리하는게 좋다.
(확장 가능성을 열어두고 작성한 부분이나 상황에 따라서 다르다. 여기서 적은 이유는 코드를 작성할때 설계가 바뀌면서 불필요해진 함수를 정리하는데 포커스를 두고 적었다.)
8. 클래스의 역활은 1개 혹은 2개로 유지하자.
하나의 클래스에 여러가지 목적이 들어가면 유지보수는 물론 정체성/목적에도 이상이 생긴다.
따라서 클래스의 목적에 맞는 하나 혹은 두개의 기술을 유지하면서 정리하자.