C++26 [C++ 20] std::source_location 사용하기 [C++ 20] std::source_location 를 사용하면 현재 코드 실행 정보를 개체로 만들어 다양하게 활용할 수 있습니다. 사용을 위해선 #include 헤더를 추가해야 합니다. 기존 [C 언어] 의 __LINE__, __FILE__, __DATE__, __FUNCTION__ (C99 : __func__) 와 같이 미리 정의된 표준 매크로 의 문제점을 개선하기 위해 만들어졌습니다. 예를 들어, __FUNCTION__ 을 사용하면 함수 이름만 얻을 수 있고 함수의 반환 타입과 입력 파라미터 정보를 얻을 수 없는 문제가 있었는데 std::source_location 를 사용하면 모든 정보를 얻을 수 있습니다. (__FUNCSIG__ 같은 매크로를 사용할 수 있지만 표준이 아닙니다) 사용 예시 #i.. 2024. 4. 22. [C++ Core Guidelines] P.10 가급적 const를 사용하자 P.10: Prefer immutable data to mutable data 이유 상수를 사용하면 실수로 데이터를 오염시킬 수 없으며, 값을 바꾸지 않겠다는 프로그래머의 의도를 코드로 보여줄 수 있습니다. constexpr, const 등을 사용하면 데이터가 불변임을 보장하므로 컴파일러가 최적화 하기도 쉽고 병렬 처리시 자원 경쟁 (data race) 을 걱정할 필요가 없습니다. 2024. 4. 21. [C++ Core Guidelines] P.9 시간과 공간을 낭비하지 말자 P.9: Don’t waste time or space 이유 C++ 프로그래머시잖아요... 알아두기 목표 (예: 개발 속도, 리소스 안전성, 테스트 단순화 등) 를 달성하기 위해서 시간과 공간을 낭비하면 안됩니다. "효율성을 추구하는 것의 또 다른 장점은 그 과정을 통해 문제를 더 깊이 이해할 수 있다는 것입니다." - Alex Stepanov 예시 (나쁜 예) struct X { char ch; int i; string s; char ch2; X& operator=(const X& a); X(const X&); }; X waste(const char* p) { if (!p) throw Nullptr_error{}; int n = strlen(p); auto buf = new char[n]; if (!b.. 2024. 4. 19. [C++ Core Guidelines] P.8 자원이 새지 않도록 하자 P.8: Don’t leak any resources 이유 자원 사용량이 천천히 증가하더라도 시간이 지나면 언젠가는 시스템의 모든 자원은 고갈됩니다. 메모리 뿐만 아니라 파일 핸들과 소켓 등도 OS 가 마음대로 제공하는게 불가능한 한정된 자원입니다. 자원이 새지 않도록 하는 것은 오랜 기간 실행되는 프로그램에서 상당히 중요할 뿐만 아니라 프로그래머의 책임감을 보여주는 요소이기도 합니다. 예시 (나쁜 예) void f(char* name) { FILE* input = fopen(name, "r"); // ... if (something) return; // 나쁨 : something == true 일 때, 파일 핸들이 누수됩니다 // ... fclose(input); } 위처럼 코드를 작성한다면 fclos.. 2024. 4. 17. [C++ 23] std::print, std::println 사용하기 [C++98] std::cout 문법은 [C언어] printf() 에 비해 개체지향적 특성을 반영하여 다형성을 지원하고 (타입에 유연) 연산자 오버로딩을 활용하여 기능을 변경할 수 있는 유연성을 가졌지만, 성능이 느리고, 여러개의 요소를 연쇄적으로 출력할때 코드가 상당히 길어지며, 출력 형식을 바꾸기 위해서 io manipulator 사용시 코드가 상당히 지저분해지는 단점이 있었습니다. 이를 해결하기 위해 나온 것이 [C++ 23] std::print, std::println 입니다. 현대적 언어 (예: 파이썬) 와 문법이 비슷해졌음을 알 수 있습니다.사용을 위해선 #include 헤더를 추가해야 합니다. 사용 예시 (std::print 와 std::println 차이점)#include int mai.. 2024. 4. 15. [C++ 20] 모듈 (Module) 사용하기 C++ 20 의 모듈 시스템이란 헤더 파일을 따로 만들지 않고도 cpp 파일들만 가지고 클래스들의 메타데이터 정보를 생성해 h 파일 없이도 링킹 가능하도록 만든 것입니다. 기존에는 대형 프로젝트의 경우 헤더 파일에서 한글자만 바꾸더라도 매크로 레벨의 헤더 파일 복붙 방식 O(n*n) 이라서 하위 cpp 파일까지 전부 컴파일을 다시 했어야 했는데, 이 기능 덕분에 컴파일 속도도 매우 빨라집니다. 현대적인 언어 JAVA, C# 등은 전부 이런 방식을 이미 쓰고 있는데 C 가 워낙 오래된 언어라서 그렇습니다.. 모듈 시스템은 2017년 표준에 들어온 기능임에도, 아직 TR (Test & Review) state 로 있어서 일부 컴파일러에서 기능을 활성화야 사용할 수 있습니다. 이 글에서는 Visual Stud.. 2024. 4. 15. 이전 1 2 3 4 5 다음