C,C++76 내가 따라하는 C++ 코딩표준 [포큐 아카데미 C++ 코딩 표준] 출처: https://docs.popekim.com/ko/coding-standards/cpp 1. 네임스페이스는 모두 소문자로 작성하자. namespace myspace {} 2. 입력(input) 매개변수는 const 참조로 출력(output) 매개변수는 포인터로 받자. bool calculate(const int& n1, const int& n2, int* result){...} 그러면 다음과 같이 함수 호출만 보고 쉽게 input과 ouput을 구분할 수 있고 안전하다. 다만 result에 NULL이 들어올 수 있으므로 함수 내에서 assert를 이용해 NULL 여부를 검사한다. calculate(n1, n2, &result); 3. bool 변수 앞에 항상 소.. 2020. 1. 2. [C++] 가비지 컬렉션과 참조 카운트에 대해 알아보자 | 메모리 관리 자동화 프로그래밍 언어엔 메모리를 프로그래머가 직접 관리해주는 unmanaged 언어와 언어단에서 관리해주는 managed 언어가 있다. 대표적인 예로 C/C++가 unmanaged 언어이며 C#, Java가 managed 언어이다. 대부분의 매니지드 언어에선 자동으로 메모리 관리를 하기 위해 다음 중 하나의 기법을 사용한다. (해당 포스팅에선 스마트 포인터를 다루기 위한 사전 지식을 위해 간단한 개념만 정리합니다.) Garbage collection (가비지 컬렉션 또는 쓰레기 수집) Reference counting (레퍼런스 카운팅 또는 참조 횟수) [Garbage collection] 가비지 컬렉션을 한국말로 굳이 번역하면 쓰레기 수집인데, 사용되지 않는 메모리를 언어단에서 수집하여 지운다는 의미로 보면.. 2019. 12. 30. [C++] C 스타일 enum과 C++ 11의 Enum class에 차이에 대해 알아보자 기존의 C 스타일 enum과 달리 C++ 11에서 등장한 enum class는 확실한 타입이 생겼다. 기존 enum은 타입이 정해져있지 않고 컴파일러가 암시적으로 정수로 변환해주는 형식이였다. 또한 다음과 같이 2개의 다른 enum 타입이 있을 때, 서로 비교가 가능했다. 이는 실제론 단순히 숫자이기 때문에 비교가 되지만 의미상으론 서로 다른 enum 타입을 비교한다는 것이 옳지 않았다. enum eColor { Red, // 0 Green, // 1 Blue, // 2 Count // 3 }; enum eAnimal { Tiger, // 0 Lion, // 1 Hipo, // 2 Count2 // 3 // Count // 다른 enum 멤버의 이름과 중복될 수 없음 }; void main() { eCo.. 2019. 12. 18. [C++] 가변 인자(Variable argument) 사용법을 알아보자 가변 인자(Variable argument)란 말 그대로 고정되지 않은 인자를 말한다. C언어의 printf() 함수처럼 정해지지 않은 개수의 인자를 받아야 할 때 사용한다. 가변 인자는 아래와 같이 인자를 ... 표시로 나타낸다. void func(int ...) { } 위 표현은 int 타입의 매개변수를 사용자가 입력한 만큼 받겠다는 의미이다. 따라서 함수 호출 시 아래와 같이 사용할 수 있다. func(1, 3, 2, 5, 8); func(1, 2); func(4); func(5, 1, 4, 8); ... 함수 내에서 가변 인자를 다루기 위해 사용하는 매크로 4가지가 있는데, 우선 다음 헤더 파일을 포함시켜야 한다. #include 헤더엔 다음과 같은 매크로가 정의되어 있다. 매크로 사용하기 위해선.. 2019. 12. 15. [C++] assert 매크로를 사용하자 / assert에 message 넣는 법 프로그램을 개발하는 도중 발생하면 안되는 오류 또는 예외를 처리하기 위해 throw나 if문 등으로 예외를 처리를 한다. 하지만 C++ 에선 디버깅 중 예외 또는 오류를 더 쉽게 찾도록 assert라는 매크로를 제공한다. assert는 예외 처리라기보다는 프로그램 개발 도중 발생해선 안되는 조건을 잡아 그 것을 고칠 수 있도록 해주는 일종의 트랩이라고 생각하면 된다. assert는 조건 식(condition)을 인자로 받아 해당 조건식이 거짓(false, 0, '\0', NULL, nullptr)이면 프로그램을 중단시킨다. 그리고 assert에 사용된 조건식과 몇 라인에서 발생하였는지 출력한다. 따라서 개발자는 오류가 어디서 발생했는지 정확한 위치와 이유를 알 수 있다. assert는 런타임에 검사를 진.. 2019. 12. 15. [C++] <memory> std::allocator<T> 클래스 안녕하세요. 오늘은 헤더의 allocator 클래스에 대해 알아보겠습니다. allocator는 유연한 메모리 관리를 위한 클래스로 할당자라고도 합니다. 일반적으로 c++에서 메모리를 동적으로 할당하고 해제할 때 new/delete 연산자를 사용하는데 allocator 클래스는 주로 라이브러리를 작성할 때, 특히 표준 라이브러리의 컨테이너를 구현할 때 많이 사용됩니다. 할당자는 fine-grained 방식 즉, 메모리 관리를 좀 더 세밀하게 컨트롤 해야하고 유연하고 효율적으로 사용해야 할 경우에 유저가 원하는 메모리 할당 방식으로 구현할 수 있습니다. 즉 allocator 클래스를 상속받아 멤버 함수를 override해서 커스텀할 수 있습니다. 컨테이너는 메모리를 최대한 효율적으로 관리할 수 있어야 하는데.. 2019. 12. 12. 이전 1 ··· 7 8 9 10 11 12 13 다음