본문 바로가기

프로그래밍/C & C++92

[C++] Pairs and Tuples References The C++ Standard Library 2nd (Ch 5.1) Contents std::pair std::tuple 아래 내용은 C++11 기준으로 작성된 내용입니다. C++98의 첫 번째 C++ 표준 라이브러리에서는 특정 클래스를 정의하지 않고 다른 타입의 value pairs를 처리하는 간단한 클래스가 제공되었습니다. 이 C++98 클래스는 표준 함수로부터 value pair를 리턴할 때나 컨테이너의 요소가 key/value pairs일 때 사용되었습니다. TR1에서는 요소의 수가 제한되었지만, 임의의 수의 요소를 가질 수 있도록 pair의 개념을 확장한 tuple 클래스를 도입했습니다. 여기서는 최대 10개의 다른 타입의 요소를 가질 수 있는 tuple이 구현되었습니다. C.. 2022. 12. 6.
[C++] C++11에서 추가된 기능 (2) References The C++ Standard Library Contents New Template Features Lambda Keyword decltype New Function Declaration Syntax Scoped Enumerations New Fundamental Data Types +) Old Languages Features [C++] C++11에서 추가된 기능 (1) [C++] C++11에서 추가된 기능 (1) References The C++ Standard Library Contents nullptr and std::nullptr_t auto Uniform Initialization Range-based Loop Move Semantics and Rvalue Reference.. 2022. 12. 4.
[C++] C++11에서 추가된 기능 (1) References The C++ Standard Library Contents nullptr and std::nullptr_t auto Uniform Initialization Range-based Loop Move Semantics and Rvalue References New String Literals Keyword noexcept Keyword constexpr C++11부터 유용하고 새로운 기능들이 추가되었는데, references에서 언급하고 있는 C++11 기능들을 이번 포스팅을 통해서 한 번 정리해보고자 합니다. Spaces in Template Expressions std::vector >; // OK in each C++ version std::vector>; // OK since C.. 2022. 12. 3.
[C/C++] 동적 라이브러리 References Advanced C and C++ Compiling Contents Creating the Dynamic Library (about -fPIC flag) Designing Dynamic Libraries Dynamic Linking Modes 지난번 포스팅 정적 라이브러리에 이어서 동적 라이브러리에 대해서 살펴보도록 하겠습니다. Creating the Dynamic Library 컴파일러와 링커는 일반적으로 동적 라이브러리를 빌드하는데 다양한 플래그를 제공합니다. 간단하게 플래그부터 살펴보겠습니다. 리눅스에서 동적 라이브러리르 생성할 때, 일반적으로 최소 아래의 두 플래그를 사용합니다. -fPIC 컴파일러 플래그 -shared 링커 플래그 gcc -fPIC -c first.c seco.. 2022. 11. 16.
[C/C++] 정적 라이브러리 References Advanced C and C++ Compiling Contents Creating Static Libraries Using Static Libraries Tips and Tricks Creating Static Libraries 정적 라이브러리는 컴파일러에 의해 생성된 object file들이 하나로 통합된 archive file입니다. 생성된 object file들을 하나로 통합하는 것은 archiver라는 툴로 수행됩니다. 리눅스에서 archiver tool은 ar 입니다. 이 툴은 GCC toolchain의 일부입니다. 예를 들어, 다음의 간단한 두 줄의 커맨드로 두 개의 소스 파일의 정적 라이브러리를 생성할 수 있습니다. gcc -c first.c second.c ar rcs.. 2022. 11. 11.
[C/C++] Static vs Dynamic 라이브러리 References Advanced C and C++ Compiling Contents Static Libraries Dynamic Libraries [C/C++] 간단한 프로그램 컴파일/링크 과정 [C/C++] 간단한 프로그램 컴파일/링크 과정 References Advaned C and C++ Compiling Contents Program's lifetime Compile Process Link Process 프로그램의 lifetime은 바이너리의 내부 구조에 의해 결정되는데, 바이너리는 OS loader가 load, unpack, 그리고, 그 내용을 실행 junstar92.tistory.com 위 포스트에서 컴파일러와 링커의 작업을 분리하는 이유를 이야기하면서 code reuse principle.. 2022. 11. 8.
[C/C++] Program Execution References Advanced C and C++ Compiling Contents Shell, Kernel, Loader Program Loading Stage Executing Program Entry Point 이번 포스트에서는 프로그램을 실행할 때 발생하는 일련의 과정들에 대해 살펴보도록 하겠습니다. 여기서는 C/C++ 코드로 빌드되어 생성된 executable binary에 대해 설명합니다. 지난 포스트에 빌드된 바이너리가 어떤 식으로 구성되어 있는지 간단하게 살펴봤는데, 필요하시면 참조 바랍니다. [C/C++] 간단한 프로그램 컴파일/링크 과정 [C/C++] 간단한 프로그램 컴파일/링크 과정 References Advaned C and C++ Compiling Contents Program.. 2022. 11. 4.
[C/C++] 간단한 프로그램 컴파일/링크 과정 References Advaned C and C++ Compiling Contents Program's lifetime Compile Process Link Process 프로그램의 lifetime은 바이너리의 내부 구조에 의해 결정되는데, 바이너리는 OS loader가 load, unpack, 그리고, 그 내용을 실행하게 됩니다. 여기서 프로그램이 C/C++로 작성되었을 때, 코드부터 실행까지의 과정을 간단히 살펴보겠습니다. Creating the source code 우선 다음의 3가지 파일을 간단하게 작성하도록 하겠습니다. function.h #pragma once #define FIRST_OPTION #ifdef FIRST_OPTION #define MULTIPLIER (3.0) #else #de.. 2022. 11. 3.
[C++] std::string 최적화 References Optimized C++ Contents 문자열(std::string) 최적화 방법 C++의 std::string은 C++ 표준 라이브러리에서 많이 사용하는 기능 중 하나이며, 구글의 크로미움 개발자 포럼에 의하여 std::string은 크로미움의 메모리 관리자를 호출하는 모든 코드 중 절반이나 차지한다고 합니다. 문자열을 조작하는 코드는 자주 실행되기 때문에 최적화한다면 최고의 효과를 낼 수 있습니다. Why Strings Are a Problem 문자열은 개념적으로는 단순하지만, 효율적으로 구현하기에는 약간 미묘한 부분이 있습니다. std::string의 기능 중 몇 가지 잘못 조합하면 비효율적인 방법으로 동작합니다. 아마 최신의 컴파일러에서는 이러한 부분들이 많이 개선된 것으로 .. 2022. 4. 24.
[C++] Error Handling (2) References Professional C++ https://en.cppreference.com/w/ Contents Stack Unwinding and Cleanup (스택 풀기와 청소) Common Error-Handling Issue Function-Try-Blocks [C++] Error Handling (1) 지난 포스팅에 이어서 C++의 에러 핸들링에 대해 알아보도록 하겠습니다. 5. Stack Unwinding and Cleanup 어떤 코드가 익셉션을 던지면 이를 받아서 처리할 catch 핸들러를 스택에서 찾습니다. 이때 catch 핸들러는 현재 스택 프레임에 바로 있을 수도 있고, 몇 단계의 함수 호출 스택을 거슬러 올라가야 나타날 수도 있습니다. 어떻게든 catch 핸들러를 발견하면.. 2022. 3. 6.