본문 바로가기

C,C++/Etc9

[C++] void*에서 enum 타입으로 캐스팅 하는 법 | cast void* to enum 윈도우즈 프로그래밍 도중 void*을 인자로 받는 함수에 enum 타입을 캐스팅하여 전달하였는데, 그 함수 내에서 다시 enum 타입으로 변환하여 switch문에 활용하려 했다. if문을 사용하면 되지만 그냥 switch case를 사용하고 싶었음. 그래서 캐스팅 방법을 알아보던 도중 void*을 uintptr_t 타입으로 변환할 수 있는 것을 알게 됨. uintptr_t는 unsigned int 타입을 재정의한 것으로 이름과 달리 포인터 타입이 아님. 이 타입은 WinAPI의 UINT_PTR 타입과 동일한데, 어디서 본 것 같은 타입. WPARAM이 바로 UINT_PTR 타입. 어쨌든 다음과 같이 void*를 두 단계에 거쳐 enum 타입으로 변환할 수 있다. enum class 타입도 동일하게 가능... 2020. 10. 31.
멀티 스레드 잠금 순서 문제 풀어보기 https://blog.naver.com/imays/221501238012 멀티스레드 잠금 순서의 규칙 (그리고 책 광고) 안녕하세요, 배현직입니다. 멀티스레드 프로그래밍에서 교착상태(deadlock)는 중요한 주제입니다. 얼마전 ... blog.naver.com 내가 푼 방법이 맞는진 모르겠지만.. 나머지 문제는 이해가 가는데 마지막 문제는 잘 모르겠다. 2020. 8. 18.
스레드 관련 글 https://www.cppkorea.org/CppCoreGuidelines/Concurrency/#Rconc-detached_thread Concurrency - C++ 핵심 가이드라인 CP: 동시성과 병렬성 종종 우리 컴퓨터가 동시에 많은 작업들을 해주길 (최소한 그렇게 보이기를) 원할 때가 있죠. 이유는 다양합니다. (예를 들면, 단일 프로세서만 쓰면서 여러 이벤트를 기다리 www.cppkorea.org 멀티 스레드 프로그래밍에 관한 고찰 1) https://kuaaan.tistory.com/114?category=91638 멀티 스레드 프로그래밍에 관한 고찰 2) https://kuaaan.tistory.com/116?category=91638 2020. 6. 25.
Visual Studio C++ 17 사용하도록 설정하기 VS2019 기준 Project - [프로젝트 이름] Properties C/C++ - Command Line 직접 지정하고 싶다면 버전을 직접 쓰고 최신 버전을 원한다면 latest로 설정 /std:c++14 /std:c++17 /std:c++latest 2020. 6. 25.
메모리 정렬과 패킹 메모리 구조에 대해 잘 모른다면 다음 포스팅을 보고 오는 것을 추천한다. [C++] 클래스의 멤버가 저장되는 영역 및 메모리 차지 클래스 사용 도중 헷갈리던 내용이 있어서 정리함. 함수 내에서 임시로 객체를 생성할 때 사용 용도에 따라 비효율적인 부분이 있는지 헷갈려서 instance 생성 시 각 멤버들이 어떻게 메모리를 차� woo-dev.tistory.com 구조체 및 클래스는 실제로 메모리 상에 어떻게 저장될까? 먼저 다음과 같은 구조체를 생각해보자. struct Foo { uint32_t mUInt1; // 32비트 uint8_t mUint2; // 8비트 int32_t mInt1; // 32비트 bool mBool1; // 8비트 char* mCharPtr; // 32비트 }; 위 구조체의 크기.. 2020. 5. 19.
[C++] 비트 연산자로 N번째 비트 변경하기 비트 연산자로 N번째 비트 변경하기 비트 단위로 연산을 수행하는 비트 연산자를 통해 원하는 비트 자리 수를 간단하게 변경하는 방법을 알아보자. [비트 연산자] 여기서 사용할 연산자만 소개 | (OR) & (AND) ~ (NOT) > (right shift) 1바이트 짜리 unsigned char 타입을 통해 비트 연산을 해보자. 먼저 1바이트는 8비트로 true/false의 값을 8개 저장할 수 있다. 다음과 같이 unsigned char 타입의 변수를 0으로 초기화 후 bitset 클래스를 통해 이진수 형식으로 출력해보자. bitset 클래스는 헤더 파일을 include 해야한다. #include #include void main() { unsigned char c = 0; std::cout 2020. 3. 11.