본문 바로가기
반응형

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

[C++] 일관된 초기화 (uniform initialization) 일관된 초기화 (uniform initialization)C++11 이전에는 변수 초기화 방법이타입(구조체, 배열, 클래스)마다 다르다.#include struct Blog{ int a; int b;};int main(){ int x = 0; int arr[3] = {0, 0, 0}; Blog gm = { 0, 0 };}  C++11 부터는일관된 초기화 (uniform initialization) 문법을 제공한다.변수 종류 상관없이 한가지 방법으로 초기화 할 수 있다. 클래스이든 일반 변수인든{ } 중괄호로 모든 변수를 초기화할 수 있다.#include struct Blog{ int a; int b;};int main(){ int x = {0}; int a.. 2025. 1. 1.
[C++] structure binding C++ 구조체• C와 달리 struct 키워드 없이 구조체 변수를 선언할 수 있다.• (C++11) 멤버에 디폴츠 초기값을 지정할 수 있다.#include struct Point{ int x = 5; int y = 5;};int main(){ Point p; // struct Point p; printf("%d %d", p.x, p.y);}  📌 [C++] 디폴트 파라미터(default parameter) [C++] 디폴트 파라미터(default parameter)디폴트 값이란 "기본적으로 설정되어 있는 값"을 의미한다. 함수 호출 시 파라미터(parameter)에 전달 될 아규먼트(argument)가 부족할 경우 대신해서 전달되는 값이기도 하다. ※ 아규먼트(argument, 인.. 2024. 12. 31.
[C++] 디폴트 파라미터(default parameter) 디폴트 값이란"기본적으로 설정되어 있는 값"을 의미한다.  함수 호출 시 파라미터(parameter)에 전달 될아규먼트(argument)가 부족할 경우대신해서 전달되는 값이기도 하다.※ 아규먼트(argument, 인수) & 파라미터(parameter, 매개변수)void sub(int a, int b, int c) // parameter{ …}sub(5); // too few argument  함수 원형을 별도로 선언하는 경우매개변수 디폴트 값은 함수의 원형선언에만 위치시켜야 한다. 또한, 우측 파라미터부터 정의해야 한다.전달되는 인자는 왼쪽에서부터 채워지고부족분은 디폴트 값으로 채워진다.// 부분 정의도 가능void sub(int a, int b = 10, int c = 20);// 중간 또는 좌측.. 2024. 12. 30.
[C++] 헤더 변화 및 특징 C++ 헤더 변화 및 특징C++ 표준 헤더 파일에는 「.h」 가 붙어 있지 않다.C언어에서 사용하던 헤더는 C++ 버전이 제공된다. → → → Q) 어떤 차이가 있을까?#include int main(){ std::printf("까망 하르방"); // error}  에서 제공되는 함수는global namespace에 제공되며 std namespace에는 제공되지 않는다.global namespace와 std namespace 모두 제공되려면 사용하면 된다.#include int main(){ std::printf("까망 하르방");}  사용자가 정의한 헤더는 「.h」 형태로 사용하기도 한다.📌 [C/C++] #include "헤더파일" & #include " data-og-descrip.. 2024. 12. 27.
[C/C++] Volatile 키워드 volatile 키워드란?• 컴파일러 최적화(optimization)에서 제외한다.• 레지스터에 값을 사용하지 않고 항상 메모리에 접근 참조• 명확한 표준이 없어 컴파일러마다 차이가 있긴 하다.  volatile 필요성C/C++ 컴파일러는 다양하며 최적화도 계속 좋아지고 있다. 예를 들어, 반복문을 변경하거나 실행 순서를 변경하기도 한다. 코드 최적화 개발자 목적과 다르게 동작하기도 해서 주의해야 한다. 예제volatile 적용하지 않은 경우// case 1)*(unsigned int *)0x8C0F = 0x1;*(unsigned int *)0x8C0F = 0x2;*(unsigned int *)0x8C0F = 0x3;*(unsigned int *)0x8C0F = 0x4;*(unsigned int *)0x.. 2024. 12. 23.
[C++] Global Namespace (글로벌 네임스페이스) 해당 포스팅에서는 global namespace에 대해예시 코드를 포함하여 scope 개념을 더 알아보고자 함. 📌 [C++] 네임스페이스(namespace)  [C++] 네임스페이스(namespace) 활용『 :: 』 기호는 Scope Operator로 "범위지정 연산자" 라고 한다.(네임스페이스 지정할 때 사용하는 연산자)#include namespace A{ void Print() { printf("a...\n"); }}namespace B{ void Print();}int main(){ A::Print(); B::Print();}zoosso.tistory.comusing 사용하면 :: 없이 간결하게 사용할 수 있지만 프로젝트 규모가 커지다보면 using 사용마저 충돌될 수 있다. 그래서 코드가 .. 2024. 12. 19.
[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.
반응형