VisualStudio.C++.C#/C . C++ ( 34 ) C++ . 네임스페이스 네임스페이스 . Namespace- 코드의 이름 충돌 방지 및 논리적인 그룹화 위해 활용. 이름 충돌 방지 (가장 큰 목적)서로 다른 라이브러리에서 같은 이름의 함수(init(), log())를 정의해도 네임스페이스가 다르면 공존 가능. 네임스페이스 기본문법 namespace 이름{....} // ; 없음. 예. #include namespace MyApp { int version = 10; void print() { std::cout 네임스페이스 중첩 및 별칭// C++17 이후 중첩은 간결하게 가능. namespace Company::Project::Module { void task() {}}// 별칭(Alias) - 긴 경로를 짧게 줄임namespace .. 2026. 1. 18. C++ Embedded Python (임베디드 파이썬) . Python C API . pybind11 C++ Embedded PythonC++ Embedded Python 이란, C++ 애플리케이션 내부에 CPython 인터프리터를 내장하고 Python C API 또는 pybind11을 통해 Python 코드를 실행하는 구조를 의미한다. Python C API vs. pybind11 비교 - pybind11 은 Python C API 호출을 C++ 스타일로 래핑하여 제작된 헤더온리 C++ 러이브러리. - pybind11 에서 11 의 의미는 C++11 표준을 적극적으로 사용했다는 의미. - C++ 프로그램에서 Pyhton 실행만 필요하고 간단하게 활용하는 경우에는 Python C API 만으로 충분. - C++ 프로그램에서 파이썬 측 함수호출 , 구조체 반환 등 많은 인터페이스가 요구되는 경우에는 .. 2026. 1. 4. VC++ 프로젝트 폴더 복사하여 작업 하는 경우 필수 삭제 해야할 것 문제상황 VC++ 프로젝트 폴더 예 MyProject_V1.0 에서 작업하였던것을 그대로 복사하여 폴더명을 MyProject_V2.0 으로 하여 프로젝트 파일 .sln 오픈하는 경우 Visual Studio 가 이전 폴더에서 작업하던 경로 정보가 남아있기때문에 소스 네비게이션이 엉뚱하게 작동한다. 해결책 프로젝트 폴더를 통째로 복사하고 나서 아래 폴더, 파일들 모두 삭제하고 나서 프로젝트 파일 오픈하면 이전 경로 참조하지 않고 새롭게 정상적인 경로로 처리된다. *.sdf (구버전 Visual Studio)*.VC.db (신버전)*.opendb.vs/ 폴더 (숨김 폴더)ipch/ 폴더Debug/ 또는 Release/ 폴더 (빌드 중간파일) 첫 등록 : 2025.04.09최종 수정 : 단축 주소 .. 2025. 4. 9. std::shared_mutex . 멀티 스레드 읽기 쓰기 락 std::shared_mutex . 읽기 쓰기 락 - C++ 17 부터 제공됨 #include class MyClass {private: std::shared_mutex rw_mutex; // 읽기-쓰기 락 객체 MyStruct data; // 보호할 구조체 변수public: void UpdateData(const MyStruct& newData) { std::unique_lock lock(rw_mutex); // 쓰기 잠금 data = newData; } MyStruct ReadData() { std::shared_lock lock(rw_mutex); // 읽기 잠금 return data; }}.. 2024. 9. 12. C/C++ . 부호 있는 정수 singed int . 음수 표현 규격 . 2's complement signed int 최상위 바이트 메모리 표현 규격 int8_t , int32_t , int64_t 등에서 음수 양수를 메모리에 표현하는 규격 양수 : 최상위 바이트의 최상위 비트 = 0 음수 : 최상위 바이트의 최상위 비트 = 1 singned int 의 최상위 바이트 비트 7 비트 6 비트 5 비트 4 비트 3 비트 2 비트 1 비트 0 1 : 음수 0 : 양수 연관 각종 AD 변환 칩들의 변환 포맷이 2's complement 가 많다. AD 변환값을 signed int 형으로 받아서 활용하면 된다. ADS1285 . 32비트 ADC ADS1285 ADC는 저잡음 정밀 디지털화 및 확장된 배터리 실행 시간이 필요한 지진학 장비의 까다로운 요구 사항을 위해 설계되었습니다. 저잡음 PGA를 사용하면 외.. 2023. 8. 27. C/C++ . volatile 변수 volatile 변수 선언 형식. volatile uint8_t ui8_v; // 변수 ui8_v 가 volatile 이 됨. uint8_t volatile ui8_v 로 해도 동일하나 일관되게 volatile 을 가장먼저 기록해 volatile uint8_t * pui8_v; // 포인터 변수 pui8_v 의 대상이 volatile 이 됨. uint8_t * volatile pui8_v; // 포인터 변수 pui8_v 자체가 volatile 이 됨. volatile uint8_t * volatile pui8_v; // 포인터 변수 pui8_v 자체와 pui8_v의 대상 모두 volatile 이 됨. volatile 변수 선언 의미 - volatile 로 선언된 변수들은 컴파일러가 최적화 하지 않는다. .. 2023. 3. 10. C++ template (템플릿), 변수, 함수, 클래스 템플릿. 제네릭 타입. 개요. C++ template C++ template C++ 언어의 기본 요소. 클래스, 함수, 변수가 제네릭타입 (Generic Type) 으로 동작하게 하는것. - 클래스 템플릿 : 클래의 멤버변수를 template 로 선언했다는 의미. - 함수 템플릿 : 함수의 인자, 반환값을 template 으로 선언 했다는 의미. - 변수 템플릿 : 변수를 template 로 선언했다는 의미. 제네릭타입으로 선언된 것이 실제 사용될 자료형으로 되는것은 컴파일 시점에 이뤄진다. 즉, 컴파일러가 코드에서 사용된 특정 자료형별로 지가 알아서 추가 코드 작성해주는 것. 유용성. 자료형이 달라진 것은 추가 코드 작성하지 않아도 된다. 연산자오버로딩,다중상속시 간편하다. 추가정보. 1. 위키백과 : 템플릿(C++) tem.. 2020. 9. 15. C/C++. 실수 , 올림 내림 반올림 , ceil floor round #include // for c #include // for c++ ceil(2.8); // 반환값 3 floor(2.8); // 반환값 2 round(2.8); // 반환값 3 . C++ 11 부터 지원됨. round(2.4); // 반환값 2 ceil(-2.8); // 반환값 -2 floor(-2.8); 반환값 -3 round(-2.8); // 반환값 -3 . C++ 11 부터 지원됨. round(-2.4); // 반환값 -2 round - nearest integer value std::round, std::roundf, std::roundl, std::lround, std::lroundf, std::lroundl, std::llround, std::llroundf - cppreference.com.. 2020. 5. 26. C++. std::map . 키-값 컬렉션 #include /// 선언 std::map my_map_i_str; /// 요소추가 예. 키=3, 값 igotit my_map_i_str[3] = std::string("igotit"); /// 요소추가 my_map_i_str.insert(std::pair(3,std::string("igotit"))); /// 요소제거 my_map_i_str.erase(3); // 요소 모두제거 my_map_i_str.clear(); /// 요소받기 std::string my_str = my_map_i_str[3]; std::string my_str = my_map_i_str.at(3); /// 요소수량 받기. my_map_i_str.size(); /// 비어있나 점검. my_map_i_str.empty(); // 요.. 2020. 4. 1. C/C++. 윈도우. 파일 저장, 읽기 . FILE . fopen, fprintf, fscanf 파일 저장하기 void save_file() { FILE* fp; float mydata[100]; fp = fopen("test.txt","w"); // 파일열었음.인자1 파일명. 인자2 w 의미 기록용도. for (int idx = 0; idx < 100; idx++) { fprintf(fp, "%f\n", mydata[idx]); } fclose(fp); } 파일 읽기 void read_file() { FILE* fp; float mydata[100]; fp = fopen("test.txt","r"); // 파일열었음.인자1 파일명. 인자2 r 의미 읽기용도. for (int idx = 0; idx < 100; idx++) { fscanf(fp, "%f\n", &mydata[idx]); } fclo.. 2020. 3. 29. C++ REST SDK. Json 형식 다루기 . 개요 C++ REST SDK 기반 Json 형식 만들기, Json 형식 데이터 에서 데이터 요소(키-값) 추출하기. Json 형식 만들기 object 를 바로 json value 형식으로 변환. #include // need for json // Json 형식 {"op":"ping"} 만들기. 키-값 1개만 있는 초간단. 아래처럼 하면됨. web::json::value obj = web::json::value::object(); obj[U("op")] = web::json::value::string(U("ping")); std::wcout wstring형변환. s 2020. 3. 22. C/C++. C 에서 C++ 함수 호출하기. extern "C" 선언. C++ 에서 C함수 호출. C 에서 C++ 함수 호출 C와 C++ 코드들이 혼재된 프로젝트에서 C++ 에서 정의된 함수를 C 에서 호출하는 방법. C++ 측에 C에 노출시킬 함수에 extern "C" 선언 추가된것은 C에서 호출가능함. /// C++ mycpp.cpp 측 코드. void function(void) { } //상기 함수를 C측에 노출시키는 함수 추가 작성. extern "C" void c_function(void) { function(); } // C++측 헤더 파일 mycpp.h 에는 위 함수 선언 추가하지 않는다. // extern "C" void c_function(void); f1(_i); } /////////// C code double call_my_class_f1(struct my_class * _p_m.. 2020. 1. 24. C. C++. 메모리 직접 접근 메모리 주소 ( 예. 0xF000F100 등 아무거나 시스템에서 메모리 주소로 사용하고 있는 것 ) 에 직접 접근하여 값 uint32_t 값 기록하는 방법. 임베디드 시스템 이라면 메모리 주소는 GPIO 포트 출력 설정하는 레지스터 주소일수도있고, 플레시 메모리 영역일수도 있다. // 코드 의미. 주소에 해당하는 숫자를 uint32_t 포인터로 처리하고 그것의 값 * 에 0xFF 대입하라. // volatile 은 컴파일러 (특히 GCC) 의 최적화 옵션 적용하지 말라는 설정. 코드에 기록된 그대로 컴파일 하라는 의미. *((volatile uint32_t *) 0xF000F100 ) = 0xFF; // 매번 위 구문 타이핑 하기 번거로우니 매크로로 정의하면 사용하기 편리하다. #define MEM_LE.. 2020. 1. 20. C/C++. & 와 * 메모리 접근 형변환 uint32_t ui32 = 26584; uint8_t ui8[4]; ////32비트 정수 ui32 를 8비트 정수배열에 배치하기. uint8_t * pui8 = (uint8_t*)&ui32; // ui32 의 주소를 uint8_t 포인터 형으로 받고. ui8[0] = *(pui8+0); ui8[1] = *(pui8+1); ui8[2] = *(pui8+2); ui8[3] = *(pui8+3); ///// ui8[0],[1],[2],[3] 개별적으로 분리된 것을 다시 32비트 정수 1개로 변환하기. //// ui8[0] + 2^8*ui8[1] + 2^16*ui8[2] + 2^24*ui8[3] 2020. 1. 13. C/C++. 구조체 변수 선언 동시 멤버 초기화 typedef struct { uint8_t UI8[4]; float f; uint32_t UI32; }ST_T1; ///// 위 타입선언된 구조체 자료형으로 구조체 변수 선언 시점에 바로 멤버변수 초기화 가능. ST_T1 myST_T1 = { .UI8[0] = 20, .UI8[1] = 30, .f = 2.3, }; 첫 등록 : 2020-01-10 최종 수정 : 단축 주소 : https://igotit.tistory.com/2439 2020. 1. 10. C, C++. 상수 2진수 , 16진수 16진수 - 숫자앞에 0x부착. 예 . 0xAC 16진수 이므로 0,..,9,A,B,C,D,E,F 로만 구성. 소문자로 해도됨. - 16진수 표현 문법은 모든 C, C++ 컴파일러에서 동일하여 완전한 표준으로 생각해도됨. 2진수 - 숫자앞에 0b 부착. 예. 0b10010001. 2진수이므로 1과0으로만 구성. - C++ 14 에서는 가독성 향상 목적으로 구분자' 사용해도됨. 예 : 0b1000'0001 - 원래 C 언어에는 2진수 표현 표준규격없었음. - 컴파일러마다 0b 를 2진수로 처리가능한 경우도 있고, 아닌 경우도 있음. - gcc 에서는 0b 가능. KEIL MDK-ARM 에서는 0b 모름. 2진수 표현 위한 마크로 - 모든 C 컴파일러에서 사용가능하려면 아래 코드예처럼 마크로 이용해도 된다... 2020. 1. 3. C/C++. 메모리 스택, 힙,지역변수, 동적 메모리 할당. stack, heap, new, delete 스택(Stack), 힙(Heap) C/C++ 에서의 스택이니, 힙이니 하는 것들은 C/C++ 컴파일러에서 메모리 핸들링 하는 것에 대한 기능적 메모리 구분 명칭. (타겟 시스템에 하드웨어적으로 스택, 힙 영역의 메모리가 따로 있는 것 아님) Stack 1. 프로그램의 "함수내"에서 선언된 지역변수(자동변수) 저장되는 메모리. 2. 함수가 끝나면 stack 에 저장된 것은 프로그램 코드에서 명시적 제거 처리 하지 않아도 자동 삭제됨. Heap 1. 프로그램에서 "동적 생성"한 경우 Heap 에 저장됨. - 동적 생성이란, new, malloc 함수 등으로 메모리 할당하는것을 의미함. 2. Heap 에 생성된 메모리는 자동 삭제되지 않음. 프로그램내에서 명시적으로 제거처리(delete, free 등) 해야 .. 2019. 12. 28. C/C++. 구조체 메모리 동적 할당. malloc , free 개요 // 정적 구조체 배열 생성예. typedef struct _st1 { uint8_t ui8Arr[100]; }ST_T1 ST_T1 myST_T1[5][9]; // 구조체 ST_T1 을 2차원 배열 5x9 짜리로 생성하는것. 위와 같은 정적 생성 방식의 구조체 배열 생성하지 않고 동적 생성하는 방법 정리. 1. 구조체 멤버만 동적 생성예. 2. 구조체 배열만 동적 생성예. 3. 구조체 멤버 및 배열 모두 동적 생성예. 1. ST_T1 의 멤버 1차원 배열만 동적생성 예. 상기와 같은 정적 방식으로 구조체 2차원 배열로 만든것과 달리, ST_T1 의 1차원 배열 uint8_t ui8Arr[100] 처럼 고정 사이즈 100 이 아닌 동적 임의 사이즈 배열 생성가능한것을 멤버로 가지면서, ST_T1 의 .. 2019. 12. 28. 이전 1 2 다음