{ 이번 항목은 그냥 예만 보여줘도 손 쉽게 이해 할 수 있을 것이라고 생각 한다. // 내부 #include 가드 예 #ifndef FOO_H_INCLUDE_ #define FOO_H_INCLUDE_ // 파일에 대한 내용 #endif // FOO_H_INCLUDE_ // 외부 #include 가드 웨 #ifndef FOO_H_INCLUDE_ #define FOO_H_INCLUDE_ #include "foo.h" #endif // FOO_H_INCLUDE_ 가드의 목적은 무엇인가? 가드의 목적은 중복 #include 를 막음으로써, 단일 정의 규칙을 지키기 위해서이다. C 컴파일러든 C++ 컴파일러든 단일 정의 규칙을 따른다. 만약 지키지 않을 경우 재정의 에러, 즉 컴파일 에러를 벹어 내며 컴파일이 ..
CPPCS 검색 결과
{ 나는 사실이 말을 듣고 무슨 말인가 했다. "완성된 형태"가 무엇을 위한 완성인지 몰랐기 때문이다. 하지만 이 항목을 읽다 보면, "내 머리속에 엄청난 녀석이 들어왔어!" 라고 느끼게 될 것이다. 이 항목에 이야기 하기 전에, "부모님와 자녀" 이라는 이야기를 하고 싶다. 어렸을 때, 나는 아버지께서 형과 나를 과보호 한다고 생각 했었는데(물론 아버지 입장에선 당연한거겠지만), 그 이유가 초등학생 때 친구네 집에서 밥 먹고 집에 가겠다고 말하거나, 자고 가겠다거나, 친구가 무엇인가 해준다고 했다고 하면, 혼났었기 때문이다. 때론 어머니의 심부름 도중 들려 형의 꼬임( 부모님께 혼난건 전부 형 잘못! )에 빠저서 "오락실"에 들려 게임 한두판을 하고 집에 가곤 했는데, 이 한두판이 1~2시간 이니, 어..
{ 왜 일까? 컴파일 타임이 무척 길어 지기 때문이다. 물론 쿼드코어에 옥타코어 더나아가 256개의 코어를 가진 컴퓨터라면 별 상관 없겠지만, 우리같은 서민은 그런 돈 없다. 머리를 써서 시간이라도 벌어야 코딩 한 줄이라도 더 할 수 있고 사장님께 더 많은 돈을 벌어야 한다면, 위의 문구를 반드시 기억해야 한다고 나는 생각한다..(물론 코딩보단 생각을 ... ) 자! 개념을 정리하면 정의 의존성이란? 한 객체를 정의 하고자 할 땐, 그 객체의 크기를 알아야 한다. 그래야지만 C++ 컴파일러가 객체의 크기로 메모리를 얼마나 할당할지 컴파일 타임에 결정 하기 때문이다. 그래서 한 객체를 정의 하고자 할때, 다른 객체가 있다면 그 객체의 크기를 알 수 있는 헤더를 제공해 주어야 한다. 순환 의존성이란? A를 ..
{ 왜 그럴까? 역시 가독성을 무척 떨어 뜨리기 때문이다. 여기서 한가지 생각해 볼만한게 있는데, 수많은 책들이 성능보단 가독성이 나쁘면 왜 좋지 못한 코드라고 할까? 내가 경험한 바, 성능을 아무리 좋게 한다고, 성능 위주 코드를 짠다 해도, 차이가 없기 때문이다. 이 이야기는 다음의 이야기를 증명해 주기도 한다. "성능의 향상은 코드에 있는것이 아니고, 프로그램의 "알고리즘"에 있다" 그렇기 때문에, 우선 코드를 잘 보이도록 짠 뒤에, 알고리즘을 개선 하는 방향으로 가는것이 진정한 성능 향상이라 할 수 있다. 그래서 가독성을 해치는 "너무 긴 함수와 많은 중첩구조는 피하라" 라고 하는 것이다. 코드를 가독하는 사람의 입장에서 함수가 너무 길면, 그 내용을 모두 기억한 채로 위에서 아래로 코드를 훓어야..
{ 왜 초기화 해서 사용하는가? 에 대해서 나는 생각했을 때 두가지 이유가 떠올랐다. 하나, 버그의 퇴치, 하나, 가독성의 향상 이다. 17 항목에서 마법의 숫자가 가독성을 무척이나 떨어뜰 일 수 있다는 것을, 18항목에서 로컬 변수가 전역 변수보다 가독성이 높고 버그의 퇴치가 유용하다는 것을 이야기 한 것 으로 기억한다. 가독성의 원리부터 보자면, 눈에 보이면 좋은거다. ; ) 그 변수가 필요할 때, 어떤 값으로 초기화 보인다면, 무엇이 더 필요하랴. 가독성 완빵이다! 버그의 퇴치로 보자면, 컴파일러 마다 다르겠지만, 전역 변수가 아닌 변수들은 항상 쓰래기 값이 들어간다. MSVC 6.0 MSVC 2003 MSVC 2005 MSVC 2008, gcc 등(.. 그러고 보니 MSVC만 줄창 써왔네, 여담으..
최근댓글