본문 바로가기

전체 글29

공용체 공용체(union)와 구조체(struct)의 차이점공용체(union) 와  구조체(struct) 는 여러 값을 담을 수 있는 데이터 타입이다. 하지만 메모리를 사용하는 방식에 큰 차이가 있다.구조체(struct) 는 각 멤버마다 고유한 메모리 공간을 가지며, 서로 독립적으로 값을 유지한다. 공용체(union) 는 모든 멤버가 같은 메모리 공간을 공유한다. 그래서 한 멤버의 값을 바꾸면 다른 멤버들의 값도 바뀔 수 있다. 공용체는 메모리를 절약하고 싶을 때 유용하다.#include #include typedef unsigned char U08;typedef union { struct { U08 dummy1 : 1; U08 LSYS : 1; U08 DCM .. 2024. 10. 11.
전처리기 토큰 결합 연산자 토큰 결함 연산자란?토큰 결합 연산자 ##는 전처리기에서 두 개의 토큰을 하나로 결합하는데 사용된다.이 연산자를 매크로 정의에서 주로 사용되며, 매크로의 인자들을 하나의 새로운 토큰으로 만들어 준다.이를 통해 동적을 특정 상황에 맞는 변수 또는 함수의 이름을 만들 수 있다. 예제#include #define CONCAT(a,b) a##bint main(){ int xy = 100; printf("xy값 : %d\n", CONCAT(x,y)); return 0;}위 코드에서 CONCAT(a,b) 매크로는 a와 b를 결합하여 새로운 토큰 xy를 생성한다.따라서 CONCAT(x,y)는 xy로 결합되며, printf() 문에서 xy변수의 값을 출력하게 된다. 2024. 10. 10.
링 버퍼 링 버퍼란?링 버퍼는 데이터를 저장하고 읽는 데 효율적인 자료 구조로, 고정된 크기의 메모리 공간을 원형 형태로 연결해 사용하는 것이 특징이다. 주로 선입선출(FIFO) 방식으로 데이터를 처리하며, 스트리밍과 실시간 데이터 처리에 효과적이다.링 버퍼의 구조링 버퍼는 배열과 두 개의 포인터로 구성된다.헤드 포인터 (Head Pointer): 데이터를 쓰고 한 칸 올라가는 포인터테일 포인터 (Tail Pointer): 데이터를 읽고 제거한 후 한 칸 올라가는 포인터링 버퍼의 동작 원리1. 데이터가 비어 있는 상태헤드 포인터와 테일 포인터가 같은 위치에 있다.2. 데이터 추가 (헤드 포인터 이동)데이터를 추가하면서 헤드 포인터가 한 칸 이동한다3. 데이터 읽기 (테일 포인터 이동)데이터를 읽고 제거하면서 테일.. 2024. 10. 10.
주소의 형 변환 C언어에서는 상황에 따라서 필요에 따라서 자료형을 임의로 변환할 수 있는 형변환이란 작업을 할 수 있다.예를 들어 정수형을 저장하는 num의 값의 10의 값을 실수로 바꾸고 싶다면 (float)num; 으로 10을 실수로 형변환하여 10.000...으로 변환 할 수 있다. 하지만 이것은 변수의 값을 변경하는 것이지 num이 저장하는 데이터 타입을 변경하는 것이 아니다. c언어에서는 한번 선언된 변수의 타입은 바꿀 수 없기 때문에 새로운 변수를 선언해야 한다.새로운 변수를 선언하는 방식int num = 10;float floatNum = (float)num; // 올바른 변환해당 방식은 이전 설명했던 것 처럼 num = (float)num;에서 새로운 변수를 선언해서 값을 저장하는 것으로 크게 다른 점이 .. 2024. 10. 10.