[C++] int8_t, int_least8_t and int_fast8_t 차이
int8_t, int_least8_t and int_fast8_t 차이해당 차이점은 Carl Norum이 인용한 C99 표준의 섹션에 정의되어있다. 하지만 예제를 통해 이해하는 것이 도움이 될 수 있다. 우리가 36-bit system에 대한 C컴파일러를 가지고 있다고 가정해보자. `char` = 9bits, `short`=18bits, `int`=36bits, `long` = 72 bits 라면,`int8_t`는 존재하지 않는다. 이는 패딩없이 정확히 8bit를 가진다는 제약을 만족시키지 못하기 때문이다.`int_least8_t`는 `char`의 typedef이다. `short`나 `int`가 아니다. 표준은 최소 8bit를 가지면서 가장 작은 타입을 요구하기 때문이다.`int_fast8_t`는 무엇이..
2025.10.05
[C++] 변수 초기화 방식
Copy Initializationint a = 123; Direct Initializationint a(123); Unifrom Initializationint b {123}; direct와 unifrom 초기화는 사용자 정의 데이터 타입을 초기화 할 때 많이 사용한다. 최근에는 uniform 초기화를 권장한다는 소리가 있다. 이는 uniform 초기화 방식이 더 엄격하기 때문이다. 예를 들어, Direct 초기화 방식을 사용하면,#include using namespace std;int main(){ int a(3.14); return 0;} 에러가 아닌 warning 메시지만 띄운다. 출력 또한 3으로 잘된다. 이는 Copy 초기화 방식도 동일하다. 하지만, unifrom으로 초기..
2025.09.25
[C++] 데이터 타입의 크기 지정 방식과 ABI
데이터 타입의 크기C++에서 기본 데이터 타입의 크기는 언어 표준에서 최소 크기만 보장하고, 실제 몇 바이트를 사용할지는 컴파일러와 CPU 아키텍처가 결정한다. 이 표를 자세히 보면 `char`을 제외하고는 기본 유형 준 표준 크기가 지정된 유형이 없다. 이는 타입의 크기가 결정되지 않은 것은 아니고, 모든 컴파일러와 머신에 걸쳐 표준 크기가 존재하지 않다는 것을 의미한다. 그래서 컴파일러가 타입의 크기를 결정한다. 보통 16bit CPU면 `int`는 2byte이고, 32bit CPU이면 `int`는 4byte이다. 다만 64bit CPU라고 `int`가 8byte가 되진 않는데, 이처럼 컴파일러 개발자가 적절하다 싶은 데이터 크기를 지정하여 구현한다(물론 ABI는 맞추어야 함). 이런 타입 크기 지..
2025.09.24
[C++] 전처리기, 매크로
#include using namespace std;#define MY_NUMBER "Hello, World!"#define MAX(a, b) ((a>b) ? a : b)int main(){ cout 여기서 MAX(a, b) 꼴은 함수처럼 보이지만 (a, b)가 함수의 파라미터처럼 취급되는건 아니다. 그저 치환당할 대상의 자리를 표시하는 정도이고, 문자열 치환으로 취급한다. 그래서 실제 함수 호출처럼 스택에 값 복사, 타입 검사 등이 발생하지 않고 그냥 코드를 복사해서 붙여 넣는 것이다. 예전에는 속도가 빠를 수 있다는 이유로 매크로 함수를 사용하는 경우가 많았지만, 요즘은 사용하지 않는 추세라고 한다. 이러한 `#define`, `#ifdef`와 같은 것들을 전처리기 지시문이라고 한다. 그리 매..
2025.09.21
[C++] 네임스페이스
네임스페이스 사용법#include namespace MySpace1{ int doSomething(int a, int b) { return a + b; }}int doSomething(int a, int b){ return a * b;}using namespace std;int main(){ cout namespace는 중첩해서 선언 및 사용할 수 있다.#include namespace MySpace1{ namespace test { int doSomething(int a, int b) { return a + b; } }}int doSomething(int a, int b){ retu..
2025.09.13
[C++] 헤더 파일 만들기와 고찰
사실 신기한 점은 굳이 헤더 파일을 만들지 않더라도 다음과 같이 전방 선언해서 사용할 수 있기는 하다. 헤더 파일 생성main.cpp#include using namespace std;int add(int a, int b);int main(){ cout add.cppint add(int a, int b){ return a + b;} 하지만, 매번 전방선언 하는 것도 일이고 파일을 분리한 이유는 재사용 하기 위함이기 때문에 헤더 파일을 만들게 된다. 그래서 다음과 같이 사용 가능하다. main.cpp#include #include "add.h"using namespace std;int main(){ cout add.h#pragma onceint add(int a, int b); add.cppint..
2025.09.10
[CMake] install
Install CMake의 install 명령어는 배포할 바이너리나 헤더들을 특정 디렉토리에 모으기 위해 사용된다. 즉 설치(install)이라는 키워드가 가지는 의미는 "빌드 산출물을 잘 정리해서 원하는 디렉토리에 배치하는 것"이다. 기본적으로 다음과 같은 명령어를 따라서 configure 및 build를 수행하게 되면 빌드 디렉토리 안에 모든 결과물들이 존재하게 된다.cmake -S . -B buildcmake --build build isntall() 커맨드를 사용할 수 있도록 세팅하였다면, `cmake --instal build` 한 번만 실행파면 실행 파일이 `bin/`에, 라이브러리가 `lib/`에, 헤더가 `include/`에 정리되어 들어올 수 있도록 할 수 있다. 즉, 설치된 프로그램처..
2025.09.05
no image
[Network] TCP/IP와 OSI 7 Layer의 간단한 정리 및 Application Layer
이 글에는 OSI 7 Layer의 각 계층에서 어떤 일이 벌어지는지 자세히 기술하지 않는다. 예전에 그런 것을 공부해보았지만, 오히려 큰 그림을 제대로 설명하는 포스팅이 없다고 느꼈고, 네트워크 지식이 필요하게 된 상황이라 조금 더 큰 맥락으로 글을 작성하게 되었다. TCP/IP와 OSI 7 Layer이 Application Layer라는 것은, 논리적인 모델인 OSI 7 계층 또는 TCP/IP 계층의 최상단에서 확인할 수 있다. OSI 7 Layer는 Basic Referecne Model로 특정 기술에 국한된 것이 아니라 모든 네트워크에 관한 모델에 대해 설명할 수 있는 범용적인 모델이다. 하지만 TCP/IP 모델은 이름에서 알 수 있듯이 인터넷 계층에서는 IP(IPv4, IPv6)를 전송 계층에서는..
2025.08.27
[Qt] CMakePresets.json, CMakeUserPresets.json
Qt프로젝트 중 CMakeUserPreset.json을 QtCreator에서 적용하는데 어려움을 겪어서, 해당 과정을 남긴다. CMakePresets.json, CMakeUserPresets.jsonCMake를 사용할 때 일반적으로 프로젝트 configure에 대한 설정을 공유할 때 문제가 생긴다. 그렇기에 CMake에서 3.19 버전부터 일반적인 configure 옵션을 지정하고, 다른 사용자와 공유할 수 있는 파일인 `CMakePresets.json`과 `CMakeUserPresets.json`를 지원한다. `CMakePresets.json`과 `CMakeUserPresets.json`은 프로젝트의 root 디렉토리에 위치해야 하며, 포맷자체는 둘 다 똑같으며, 둘 다 필수가 아닌 사용자가 필요하에..
2025.08.20
QT
no image
RTSP 개념 정리
RTSPRTSP는 전송계층을 TCP를 사용하므로 먼저 이에 대한 개념을 간략히 살펴보자. TCP와 UDPOSI 7 Layer 또는 TCP/IP 4 Layer에서 Transport에 해당하는 계층에 TCP와 UDP 프로토콜이 존재한다. IP는 데이터의 배달을 처리. TCP는 패킷을 추적 및 관리. UDP보다 복잡한 절차를 통해 신뢰성을 가지므로, 연속성보다 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜이다. 대충 UDP처럼 패킷을 무작위 path로 보내서, 순서대로 패킷이 도달하지 않는 신뢰성을 보장하는 전송 프로토콜이라고 생각만 하고 넘어가보자. RTSP의 기본 동작TCP를 기반으로 동작 (UDP를 통한 데이터 전송도 가능한 것처럼 보임)RTP를 통해 미디어 데이터를 전송RTCP를 통해 품질 / 통계..
2025.08.19
[Computer Graphics] FPS 계산
FPS 계산 방식FPS는 frames per second로 1초당 몇 개의 프레임이 지나갔는지를 의미한다. 그러므로 FPS는 다음과 같은 식으로 계산한다:$$ FPS = \frac{frames}{1 \space sec} $$ 또한, FPS와 역수 관계인 frameTime이 존재한다. 이는 한 프레임을 그리는데 걸린 시간을 의미한다.$$ frameTime = \frac{sec}{1 \space frame} $$ 보통 개발할 때는 ms를 반환받아 사용하기 때문에, $1000$으로 나누어 밀리초를 초로 변환하여 사용한다. $$ FPS = \frac{frames}{\frac{elapsedMs}{1000}} $$총 프레임에 흐른 시간을 나눈다. $$ FPS = \frac{frames}{elapsedMs} \ti..
2025.07.08
no image
백준 2109번 순회강연 [C/C++]
첫 번째 시도 방식 (X)day를 기준으로 오름차순을 하고, 같은 날에선 가격을 기준으로 내림차순 하여 가능한 업무를 처리. 반례는 있다고 인지했지만, 다른 방식이 떠오르지 않아 먼저 해당 방식으로 구현해보았다.#include using namespace std;int n, p, d;int dayCount = 1;int ret;vector> v;bool cmp(pair a, pair b) { if (a.second b.first; } else { return false; }}int main(){ cin >> n; for (int i = 0; i > p >> d; v.push_back({ p, d }); } sort(v.begin(), v.end(), cmp); for (int i = 0; i ..
2025.05.23