목록C++/문법 및 메소드(STL) (42)
나만의 작은 도서관
주의사항: 해당 글은 다듬지 않은 날것 그대로인 글입니다. 이슈의 배경: LinkedList 구현자주 사용하지 않았던 LinkedList의 개념을 확실히 잡고자 STL에서 제공하는 list를 사용하지 않고 이중 연결 리스트(Doubly Linked List)를 직접 구현하고 있던 상황이었다. 새로운 원소를 삽입하기 위해서 Insert 함수를 구현하고 있었는데, 이상하게도 방금 만든 Node가 연결 작업을 하지 않았는데도, 이미 LinkedList에 있는 노드와 연결되어 있던 것이다. Insert 함수의 코드는 아래와 같다.Node* Insert(Node* cursor, T data){ Node* newNode = new Node(data); // 여기서 cursor의 prev로 newNode가 ..
주의사항: 해당 글은 다듬지 않은 날것 그대로인 글입니다. 쓰레기 값이란?쓰레기 값이란 초기화되지 않은 메모리에 들어있는 값을 의미한다. 예를 들어, int a; 와 같이 변수를 선언만 하고 값을 초기화하지 않았다면, a에는 쓰레기 값이 들어있게 된다.int a;cout 물론, 전역 변수와 정적 지역 변수(static)는 사용자가 초기화를 따로 하지 않아도 자동으로 초기화되기 때문에 쓰레기값 대신 기본값이 들어있게 된다. 그렇기에 전역 변수와 정적 지역 변수는 오늘 다룰 주제에서 제외된다. struct나 class의 멤버 변수의 쓰레기 값struct나 class가 들고 있는 멤버 변수들은 객체가 생성될 때 자동으로 초기화될까?그렇지 않다. struct나 class의 멤버 변수도 기본 타입(int나 flo..

개요컴파일러는 컴파일 단계에서 소스 코드를 목적 코드(예: .obj, .o 파일)로 변환하여, 이후 단계인 링커 단계에서 링커가 사용할 수 있도록 한다. 이 목적 코드에는 크게 두 가지 핵심 요소가 포함되는데, 첫 번째 요소로는 실행 가능한 기계어 수준의 “명령어”, 두 번째 요소로는 링커가 코드 조각들을 연결할 때 참조하는 “심볼 테이블”이다. 이 중 심볼 테이블은 외부 또는 내부 심볼을 식별하고 연결하는 데 필요한 정보를 담고 있으며, 이를 이해하려면 먼저 심볼(symbol)이라는 개념을 정확히 파악할 필요가 있다. 따라서, 이 글에서는 심볼이 무엇인지, 그리고 어떤 종류의 심볼이 존재하는지 살펴본다. 이어서, 컴파일러가 심볼을 심볼 테이블에 추가할 때 사용하는 저장 방식 지정자(storage cla..

개요컴파일 단계는 프로그래밍 언어로 된 코드를 기계어로 변환하는 과정이다. 이 과정을 수행하는 컴파일러는 ODR(One Definition Rule, 유일 정의 규칙)이라는 정해진 규칙을 준수하는데, 이러한 ODR을 이해하기 위해 필요한 개념이 바로 번역 단위와 선언과 정의이다.이 글에서는 컴파일 과정에서 준수하는 ODR이라는 규칙을 이해하기 위해 번역 단위가 무엇인지, 선언과 정의가 어떻게 구분되는지, 그리고 마지막으로 ODR 정의에 대한 해석을 간단하게 다룬다.번역 단위(translation unit)번역 단위(이하 TU)란 하나의 소스 파일(.cpp)이 전처리 단계를 거친 후에 생긴 결과물을 의미하며, 컴파일러가 소스 파일(.cpp)을 처리하는 단위이다.즉, TU는 #include, #define과..

#pragma 지시문#pragma 지시문은 C/C++ 표준 키워드가 아닌 컴파일러에 종속된 키워드들로, 컴파일러의 종류에 따라 기능이나 문법이 다르다.#pragma는 #include나 #define처럼 전처리기에 의해 처리되지만, 전처리기는 이를 단순히 해석하여 컴파일러에게 전달하고, 실제 동작은 컴파일러가 수행한다.이러한 #pragma를 활용하면 코드의 경고 제어, 최적화 설정, 메모리 정렬, 헤더 중복 방지 등 다양한 작업을 수행할 수 있다.대표적인 #pragma 지시문들#pragma once#pragma pack#pragma region#pragma comment#pragma once#pragma once#pragma once는 헤더 파일이 동일한 번역 단위(translation unit, TU) ..

전처리기 지시문(preprocessor directive)이란?전처리기 지시문은 전처리 단계에서 전처리기(preprocessor)에 의해 처리되는 명령어로, 명령어들은 모두 ‘#’ 기호로 시작한다.전처리기 지시문을 활용하면 파일 포함, 조건부 컴파일, 매크로 정의 등 다양한 작업을 수행할 수 있다.대표적인 전처리기 명령어#include#define#ifdef, #ifndef#include#include "path-spec" // 사용자 정의 파일 추가 방식#include // 표준 라이브러리 추가 방식#include는 전처리기 지시문 중에서도 가장 자주 사용되는 명령어로, 지정한 파일을 현재 소스 파일에 추가한다. #include가 파일을 추가하는 방식#include가 실행되면 지정한 파일의 모든 내..