본문 바로가기
반응형

프로그래밍 언어/C++63

[C++] 네임스페이스(namespace) 활용 『 :: 』 기호는 Scope Operator로 "범위지정 연산자" 라고 한다.(네임스페이스 지정할 때 사용하는 연산자)#include namespace A{ void Print() { printf("a...\n"); }}namespace B{ void Print();}int main(){ A::Print(); B::Print();}void B::Print() // 선언부와 정의부 구분{ printf("b...\n");} 여러 사람이 작업을 하다보면 변수나 클래스명이 같을 수 있다.namespace로 영역을 구분할 수 있다.→ 관련 코드 (함수, 구조체 전역 변수 등)을 묶어서 관리하는데 사용 동일한 영역에서 정의된 함수 호출할 때는네임스페이스를 명시할 .. 2024. 12. 18.
[임베디드/펌웨어] Bitmap Based 연산 예시 Bitmap Based = 2진수로 표현했을 때 비트(bit) Set / Clear 여부로 표현 ex) 0xFFFF → 1111'1111'1111'1111 → 16개로 표현 FLASH 이나 RAM 의 저장공간은 역할에 맞게 크기가 정해져 있다.펌웨어에서는 저장 공간 영역을 'Bitmap Based' 처리하는 경우가 많다.* 공간 크기를 이진수를 활용해서 효과적으로 표현하기 위함메모리 공간 0x0 ~ 0x2000해당 공간을 0x0000 ~ 0xFFFF 로 표현할 수 있다고 해보자. LSB 부터 각 비트에 mapping 되는 메모리 "시작 주소"를 계산해보면전체 영역 0x2000 (= 8KB = 8,192) 공간을 16 등분 했다고 볼 수 있다. 8192 / 16 = 512 Byte  각 비트가 512 By.. 2024. 12. 1.
[C/C++] packed 키워드 packed란구조체, 공용체, 클래스 메모리 정렬 방식을 제어하기 위해 사용 일반적으로 구조체 멤버들은 컴파일러에 의해 정렬된다. (alignment)= CPU 성능 최적화 위해 메모리 주소를 특정 크기(4 Byte, 8 Byte 등)로 맞추는 것 이러한 정렬은 메모리 사용량을 증가시킬 수 있다.이 경우 packed 속성으로 컴파일러에게 정렬을 무시하고멤버들을 바로 이어서 저장하도록 지시할 수 있다. 즉, 메모리 접근이나 공간적 측면에서 효율을 높일 수 있지만성능 손실이나 CPU 비정렬 데이터 접근 문제 초래할 수도 있다. [예시 코드 1]__attribute__((packed)) 또는 #pragma pack 사용하여 구조체를 packed로 설정할 수 있다.#include struct A { cha.. 2024. 11. 16.
[C++] likely, unlikey 키워드 구문 [C++] likely, unlikey 키워드likely, unlikey는 컴파일러 최적화와 연관된 키워드 • likely | 컴파일러에게 참인 경우가 더 많을 것이라는 정보 제공하여 최적화• unlikely | 컴파일러에게 거짓인 경우가 더 많을 것#include int main(){ if (num == 1) { // ... } else { // ... }}  컴파일러 num 값이 "1"일 확률 그 외의 값일 확률에 대한정보가 없기 때문에 이를 최적화 하지 않는다.if문 성능 최적화를 위해서는 가장 많이 해당하는 분기조건을 상단에 두는 것이다.  이와 같은 방식으로number 값이 "1" 확률이 높다면 컴파일러에게 힌트를 줄 수 있다.#inclu.. 2024. 11. 10.
[C/C++] 패딩 비트 (Padding Bit) 패딩비트 (Padding Bit) 패딩비트란 사용하지 않는 비트 의미한다.구조체에서 가장 큰 자료형 크기를 따라간다.typedef struct{ int power; // 4 B int level; // 4 B char status; // 1 B} User;  int 4바이트, char 1바이트user구조체 크기는 9바이트 예상 된다.자료형 크기는 sizeof(자료형)로 알 수 있다.#includetypedef struct{ int power; int level; char status;} User;int main(){ User user; printf("power 크기 = %d \n", sizeof(user.power)); printf("level 크기 = %.. 2024. 11. 9.
[C/C++] struct 차이 비교 C++에서는 Class가 있지만 stuct 형태도 사용 가능하다. C에서 사용하던 형태와 C++ 차이가 존재한다.  [C] StructC언어 구조체 안에는 변수만 둘 수 있다.그래서 구조체 함수를 외부에 두어야 한다. [C style 예시 코드]#include struct st{ int no; char ch;};void InitStruct(struct st* t, int n, char c);void PrintStruct(const struct st* t);int main(){ struct st harbang; InitStruct(&harbang, 2024, 'B'); PrintStruct(&harbang);}void PrintStruct(const struct st* t){ .. 2024. 11. 8.
[C/C++] #define과 const 차이 #define• 메모리에 올라가지 않는 장점• 타입 지정 필요 없다• 전처리기로 수행되기 때문에 디버깅 하기 쉽지 않다.• 연산 우선순위에 따라 다르게 계산될 수 있기에 괄호 표시 주의 const• 타입 지정 필요하다 • 컴파일러가 처리하기 때문에 디버깅 용이 • 일반 변수와 같이 메모리 할당됨 • 변수에 대입한 값이 이미 계산이 완료된 상태로 들어있는 상태#define YEAR 2019#define MONTH "Apr"#define DAY 2const int kYear = 2019;const char[5] kMonth = "Apr";const int kDay = 2;  연산시 주의사항#include using namespace std;#define TEST_VARIABLE_DEFINE 2+5const .. 2024. 11. 2.
[C++] auto 키워드 [C++] auto 키워드auto 키워드는 선언된 변수의 초기화 식을 사용하여해당 형식을 추론하도록 컴파일러에 지시이것을 타입 추론(type inference)라고 한다.#include using namespace std;int main() { auto sum = 1 + 3; cout   auto 키워드 주의 사항생성 시 변수를 초기화 할 때만 작동한다. 초기화 값을 사용하지 않고 생성된 변수는 이 기능을 사용할 수 없다.또한 auto 키워드는 함수 매개 변수와 함께 사용할 수 없다auto for문 (Ranged-based for loops)#include using namespace std;int main() { int arr[5] = {100, 200, 300, 400,.. 2024. 10. 28.
[C/C++] union 공용체 union 이란공용체란 멤버변수끼리 메모리를 공유하는 것메모리를 아낄 수 있는 장점이 있지만다른 멤버변수에 값을 넣으면기존 값을 overwrite 하기 때문에 잘 관리해야 한다.#include union data{ double ID; int age; int score; char grade;};void main(void){ union data harbang; harbang.age = 70; printf("age : %d \n", harbang.age); printf("grade : %c \n", harbang.grade); harbang.grade = 'A'; printf("age : %d \n", harbang.age); printf("grade.. 2024. 10. 27.
[C/C++] Header Guard 활용 여러 파일에서 특정 헤더 파일을 #include 할 수 있다.이 경우 헤더파일이 중복 컴파일되어 에러 발생하게 된다. 그렇기에 모든 header 파일은 여러 번 포함되는 것을 방지하기 위해header guard를 가지고 있어야 한다.  #pragma onceC++ 표준은 아니지만컴파일러 대부분이 지원하며 컴파일 속도가 빠른 편이다.또한 이름 충돌 위험도 적은 편이라서 활용도가 좋다.* 모든 컴파일러에 지원되지 않는다.#pragma onceclass MyClass{public: MyClass(); ~MyClass(); void doSomething();};  • 헤더파일 포함횟수와 관계없이 단 한번만 컴파일 처리• header 파일 1번째 줄 [#pragma once] 작성 2번째 줄은 공.. 2024. 7. 24.
반응형