본문 바로가기

728x90
반응형

C

(7)
C: bitmask forloop with enum 1, 2, 4, 8, 16... 과 같이 bitmask를 활용한 enum에서forloop를  '++' 연산 대신  ' #define TU_BIT(n) (1UL 1 KEYBOARD_MODIFIER_LEFTSHIFT = TU_BIT(1), // 1UL 2 KEYBOARD_MODIFIER_LEFTALT = TU_BIT(2), // 1UL 4 KEYBOARD_MODIFIER_LEFTGUI = TU_BIT(3), // 1UL 8 KEYBOARD_MODIFIER_RIGHTCTRL = TU_BIT(4), // 1UL 16 KEYBOARD_MODIFIER_RIGHTSHIFT = TU_BIT(5), // 1UL 32 KEYBOARD_MODIFIER_RIGHTALT..
버퍼 # buffer # memcpy # buffer overflow C에서 memcpy가 buffer를 사용한다고 한다. memcpy는 아래와 같이 사용한다.memcpy(dest, src, count) 이는 dest 변수에, src 변수에 담긴 byte를 count 갯수 만큼 복사하는 것이다. 이 과정에서 buffer를 사용한다. buffer는 물리적으로는 메모리의 일부 영역이다 (block of memory) buffer를 기능적으로 얘기하자면,데이터 전달 과정에서, 데이터 유실을 막기 위해서 고안된 데이터 임시 저장 공간이다. 데이터 유실을 어떻게 막을 수 있나?  A장치 에서 B장치로 데이터를 전달할 때, A에서 보내는 데이터 속도가 B에서 처리하는 속도보다 빠른 경우,  A에서는 1,2,3 의 데이터를 보내는데, B에서 처리하는 속도가 느려서 1, 2만 받는 경우..
C: #ifndef / likely(x) / unlikely(x) / __builtin_expect(!!(x), 1) #if (CONFIG_COMPILER_OPTIMIZATION_PERF)#ifndef likely#define likely(x) __builtin_expect(!!(x), 1)#endif#ifndef unlikely#define unlikely(x) __builtin_expect(!!(x), 0)#endif#else#ifndef likely#define likely(x) (x)#endif#ifndef unlikely#define unlikely(x) (x)#endif#endif/** * Macro which can be used to check the condition. If the condition is not 'true', it prints the message * and ..
C: function pointer ESP-IDF의 예시코드typedef void (*esp_hidd_event_cb_t) (esp_hidd_cb_event_t event, esp_hidd_cb_param_t *param); function pointer  - 함수의 주소를 가리키는 포인터  - callback, event driven 함수에서 유용하게 사용 가능  Function pointers in C are a powerful feature that allow you to store the address of a function in a variable, and use that variable to call the function. This can be very useful for implementing callback..
C: designated initializer # Array # Structure # 초기화 Designated initializers in C are a feature that allows you to set the values of specific elements in an array or fields in a structure in any order during initialization, and are particularly useful for initializing structures and arrays with clear, readable code. This feature is part of the C99 standard and later.Basics of Designated InitializationWith designated initializers, you can specify w..
C: union # struct union  - 다양한 타입의 변수를 담을 수 있다.  - * 메모리를 공유한다.      union 내에 선언된 가장 큰 변수 타입의 크기만큼을 메모리로 할당 받고, 이 메모리를 union 내의 변수들이 공유      -> 값이 덮어 씌여진다.   - struct와 모양은 유사하나 각 변수들이 메모리 공간을 개별로 할당 받는 것이 아니라,     선언되는 변수가 그 메모리 공간을 차지하게 된다.   - 메모리를 효율적으로 사용해야되는 상황에서, 배타적으로 사용될 변수들을 정의할 수 있는 경우에 유용 아래는 ChatGPT 설명 es, the C programming language includes a data type known as a "union." A union is a special data ty..
C: do {...} while(0) 사용 이유 # do {} while(0) # macro 매크로 # preprocessor 전처리기 The do { ... } while(0) structure is a common C macro idiom used to ensure that the macro behaves like a function or a statement block when used. This allows you to call the macro in your code without worrying about dangling else clauses that might otherwise misinterpret the end of the macro as the beginning of an else block. * 매크로 관용구 (매크로: 복수 명령어) * 매크로에 do ~ while (0)을 사용하면, 1. 매크로 안에 지역변수를 사..

728x90
반응형