728x90

Language/C++ 28

[C++] Utf8 코드를 한글로 출력하기

리눅스에서 무선랜 인터페이스를 통해 주변의 Wifi를 검색하여 목록을 출력하는 기능을 구현 중, ssid가 한글이면 uft8 코드로 출력되었다. 한글 1개의 문자는 총 3개의 utf8 코드로 구성되어있으며 이를 잘 활용하면 식별할 수 있는 한글 문자(?)가 된다. 실제 기능을 구현할 때는 한글 중간 특수문자를 포함한 다양한 문자가 사이사이 올 수 있음에 주의한다. 크기 3의 char[]을 사용해 각 char 마다 utf8 코드를 넣어 한 개의 String으로 출력하였다. 아래 코드는 실제 QT Project에서 사용한 일부분이다. char hangulBuf[4] = {0,}; int hanIdx = 0; foreach (const QString& item, srcSplit) { if('x' == item..

Language/C++ 2021.05.24

[C++] Singleton 패턴을 사용하는 간단한 예제

코드를 구현하다보니 생각지 못하게 프로세스 내부에서 데이터 공유가 많이 발생하였고 singleton으로 수정해야 되는 부분이 있어, 샘플 코드를 작성하였다. - singleton.h #pragma once #include class Singleton { private: static Singleton* pInstance; Singleton() { num = 0; }; ~Singleton() {}; private: int num; public: static Singleton* getInstance() { if (pInstance == nullptr) { pInstance = new Singleton; } return pInstance; } void SetNum(int val) { num = val; } in..

Language/C++ 2021.03.02

[C++][공통] 기본적인 개념

1. 프로그램 구조 - 표현식 > 표현식은 명령문 내에서 사용되기 때문에 자체적으로 컴파일 될수 없다. e.g) (x = 5;) - 명령문 > 세미콜론(;)으로 끝나는 것 - 함수 > 순차적으로 실행된느 명령문의 집합 > C++ 프로그램에는 main이라는 특수 함수가 있어야 한다. 2. 라이브러리 - 프로그램에서 재사용하기 위해 "패키지화" 되어 있는 미리 컴파일된 코드의 모음. - 라이브러리는 프로그램에서 수행할 수 있는 작업을 확장하는 일반적인 방법을 제공한다. - C++ 에서는 추가 기능을 제공하는 C++ 표준 라이브러리를 제공한다. e.g) iostream 3. 객체 - 값을 저장하고 사용할 수 있는 메모리 조각 - C++ 에서 사용하는 대부분 객체는 변수의 형태로 존재한다. 4. 변수 - 이름을..

Language/C++ 2020.12.15

[C++] 헤더 파일

1. 헤더 파일(Header File) - 다른 파일에 대한 선언을 가지고 있다. - 는 컴파일러와 함께 제공되는 파일을 include 할 때 사용한다. 위 헤더 파일은 C++ 런타임 라이브러리의 헤더 파일로써 운영체제의 특별한 위치에 존재한다. - "" 는 소스 파일이 있는 디렉토리에서 헤더 파일을 include 하도록 전처리기에 지시한다. 일반적으로 이와 같은 방법으로 자신이 작성한 헤더 파일을 include 한다. 2. 헤더 파일 작성하기 - 사용하고자 하는 모든 함수에 대한 전방 선언을 각 파일에 작성하는 것은 매우 비효율! - 헤더파일은 이러한 부담을 줄여준다. 헤더 파일을 사용하면 선언을 필요한 만큼 한 번만 작성하면 되고, 함수 원형에 대한 유지 보수를 편하게 해준다. - 헤더 파일의 구성 ..

Language/C++ 2020.12.15

[C++] 헤더 가드

1. 중복 정의 문제 - 식별자는 하나의 정의만 가질 수 있다. 따라서 변수 식별자를 두 번이상 정의한 프로그램은 컴파일 오류가 발생한다. - 함수를 두 번 이상 정의하는 프로그램도 컴파일 오류가 발생한다. 2. 헤더 가드 - 헤더 가드라는 메커니즘을 통해 위 문제를 해결할 수 있다. (실제로 이전 회사의 코드에서 많이 사용) - 헤더 가드는 조건부 컴파일 지시자를 이용한다. e.g) #ifndef MATH_H #define MATH_H 3. #pragma once - 현재 많은 최신 컴파일러는 #pragma 지시자를 이용하여 단순한 헤더 가드를 지원한다. - C++ 언어의 공식적인 부분이 아니므로 모든 컴파일러가 지원하는 것은 아니다. 따라서 호환성을 위해 헤더 가드를 사용하는 것이 좋다.

Language/C++ 2020.12.15

[C++] 포인터와 배열의 차이

1. 포인터는 변수이지만 배열은 상수이다. - 포인터는 고유의 메모리를 차지하고 있어 다른 대상을 가리킬 수 있다. - 배열은 선언시 그 위치가 고정되므로 다른 대상을 가리킬 수 없다. - 배열은 오로지 선두 번지를 읽을 수 있을 뿐이다. 2. 포인터가 가리키는 배열의 크기는 동적으로 결정할 수 있지만, 배열이 가리키는 배열의 크기는 선언할 때 정적으로 결정된다. - 포인터로 할당한 배열은 실행 중에라도 realloc()으로 크기를 재할당할 수 있다. 3. 포인터는 대상체가 무엇이든 4 byte의 크기를 차지하므로 함수를 전달할 수 있지만, 배열은 그 자체가 크기 때문에 함수의 인수로 전달할 수 없다. - 따라서 배열을 함수로 전달할 때는 반드시 포인터를 사용해야한다. 4. 배열로 요소를 읽는 것과 포인..

Language/C++ 2020.12.15

[C++] 캐스트 연산자

1. C의 캐스트 방법 - 사용자의 요구대로 무조건 타입 변환 (부작용이 많다) e.g) (변환타입)변수; 2. C++의 캐스트 연산자 1) static_cast - 상속 관계 클래스 포인터 및 레퍼런스, 기본 타입, 타입 체크X - 지정한 타입을 무조건 변경하는게 아닌 논리적으로 변환 가능한 타입만 변환한다. * 실수형정수형 정수형실수형 상호 호환되는 열거형 정수형 - 포인트 타입을 다른 것으로 변환하는 것은 허용되지 않는다. > 상속 관계에 있는 포인터끼리만 변환이 허용된다. - 상속 관계에서 다운 캐스팅은 캐스트 연산자의 도움 없이는 허가되지 않는다. > 업 캐스팅 : 상속 계층의 위쪽으로 이동하는 변환. > 다운 캐스팅 : 상속 계층의 아래쪽으로 이동하는 변환, 부모가 자식의 모든 멤버를 가지지 ..

Language/C++ 2020.12.15

[C++] RTTI (RunTime Type Information)

1. RTTI ? - 실시간 정보 타입 - 실행 중 타입에 대한 정보가 필요할 때 사용하는 기능. > 언어가 제공하는 표준이므로 호환성, 이식성이 확보되어 있다. - 가상 함수가 있는 클래스에 대해서만 동작한다. > 클래스의 타입 관련 정보가 vtable에 같이 저장되기 때문이다. > 가상 함수가 없는 클래스는 실행 중에 타입 정보를 알아야 할 필요가 없다. > 컴파일러는 컴파일 번역 작업이 끝나면 타입 이름을 실행파일에 남길 필요가 없어 RTTI로 정보를 가져온다. - RTTI가 제대로 동작하기 위해서는 모든 클래스에 타입과 관련된 정보를 작성해야한다. > 프로그램이 느려지고 용량이 커지는 문제가 있다. > 따라서 RTTI 기능을 사용할 것인지 아닌지에 대한 옵션 조정이 있다. (Visual Studi..

Language/C++ 2020.12.15
반응형