C/C++(9)
-
[C/C++]네임 맹글링(Name mangling)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 직역하면 "이름 짓이기기". 음... 이게 뭐길래 어감이 영 좋지 않습니다. 오늘은 제가 외부 라이브러리나 브리지 작업을 할 때 주로 겪었던 Name mangling에 관하여 글을 써보려 합니다. Name Mangling Name Mangling은 컴파일러가 자기 마음대로 변수나 함수의 이름을 변경하는 것을 의미합니다. 함수 오버 로딩을 알고 있나요? 함수 이름이 같고 리턴 값 타입이나 매계 인자가 다른 경우에도 하나의 이름으로 사용할 수 있게 해 주는 C++의 기능입니다. 여담으로 Name Decoration이라고 부르기도 합니다. 예를 들어 보겠습니다. 아래는 매계인자로 받은 값을 + 해주는 함수를 작성한 코드입니다. int Add(int..
2022.04.09 -
[C/C++]포인터
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 이번 글에서는 포인터에 관한 개인적인 고찰에 대해서 적어보려 합니다. 포인터는 자료형이다 정수형 자료형 int, 문자형 자료형 char… 프로그래밍을 하면서 참 많이 보는 것들입니다. 이런 것들을 자료형이라고 한다. 자료의 형태라는 것인데… 포인터도 자료형일까요? 개인적인 생각으로는 자료형이라고 생각합니다. 단지 int가 정수를 값으로 사용하고 char가 문자를 값으로 사용하는 것처럼 포인터 자료형은 주소 를 값으로 사용하고 있죠. 즉, 주소 값을 저장하기 위한 메모리 공간일 뿐이라는 것입니다. 참고로, 모든 포인터타입은 4byte(32bit 컴퓨터 기준, 64bit는 8byte 크기)입니다. 포인터는 왜쓰지? 옛날에 프로그래밍을 처음 공부하..
2022.04.09 -
[C/C++]C++의 키워드 몇 가지
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 C++을 공부하면서 사용해본 혹은 찾아본 예약어를 몇 가지 적어보고자 합니다. 이것도 은근히 기술면접 질문으로 많이 나온다고 합니다. 무의식적으로 아 그런 기능인가 보다 하고 사용하다가, 어? 이런 거야?라고 깨닫게 되는 순간들이 문득 있었던 추억이 있습니다. 익숙한 게 무섭다는 게 이런 걸까요? const / constexpr 상수 객체를 만들 때 많이 사용했던 키워드들입니다. 두 가지가 있는데 둘 모두, 객체를 상수화 시킵니다. 그런데 굳이 두 가지가 따로 있다는 건, 차이가 있다는 것이겠죠. 어떤 차이가 있을까요? const 컴파일 타임, 런타임에 초기화될 수 있음 비 정적 멤버 함수에만 쓸 수 있다 => 이 경우 const 멤버 함수는..
2022.04.09 -
[C/C++] 캐스팅연산자
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 코딩을 하다가 실수형 변수를 정수형으로 변환하기 위하여 (int)라는 것을 한 적이 있나요? 이와 같은걸 캐스팅, 한국말로는 형 변환이라고 합니다. 사실 (int)와 같은 일반적인 명시적 형 변환은 좀 위험합니다. 강제로 형태를 변환시키니… 하지만 캐스팅이 필요한 경우가 확실히 있습니다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇 가지 등장한 캐스팅 연산자들이 있습니다. 이번 글에서는 캐스팅 연산자들에 관하여 특징만 간단히 다뤄보려 합니다. 살펴볼 캐스팅 연사자들은 다음과 같습니다. static_cast dynamic_cast const_cast reinterpret_cast 캐스팅 연산자들은 의 타입으로 캐스팅을 해줍니다. ex..
2022.04.08 -
[C/C++]STL 컨테이너 - std::map/std::set 그리고 std::deque
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 이전 글인 [C/C++]STL 컨테이너 - std::vector 와 std::list 에 이어지는 글입니다. 이번 글에서는 std::map과 std::set 그리고 std::deque에 대해서 알아보겠습니다. std::map과 std::set 위의 두 컨테이너는 기능상으로는 매우 유사하기에 같이 다루겠습니다. 차이라고 한다면 map은 key와 그 키의 값에 해당하는 value가 함께 저장되고, set은 key값만 저장되는 구조입니다. 간단한 특징들은 다음과 같습니다. map 레드 - 블랙 트리 기반 Key값과 데이터를 한쌍의 원소로 관리하는 컨테이너 Key값의 중복을 허용하지 않음 (multmap의 경우 key 부분의 중복을 허용함) Key값..
2022.04.08 -
[C/C++]STL 컨테이너 - std::vector 와 std::list
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 과거 취업활동을 위하여 면접을 보러 다닐 때 많이 들었던 질문이 있습니다. STL 컨테이너뿐 아니라 C#의 컬렉션 등 각 언어별 개체(데이터)의 그룹을 다루는 기술은 내부적으로 고유의 자료구조가 있습니다. 이 때문에 자료구조에 대한 이론적인 내용이나 알고리즘, 메모리 최적화는 물론 이를 적절하게 활용할 수 있는지 보는 단골 질문입니다. 오늘은 개인적으로 많이 쓰인다고 생각하는(면접에서 가장 많이 물어보았던 것 위주) C++ STL의 표전 컨테이너들에 관하여 알아보려 합니다. 이번 글에서는 std::vector 와 std::list 에 관하여 알아보겠습니다. std::vector 랜덤 액세스 iterator를 사용하는 배열 기반의 자료구조 배열..
2022.04.08