[C/C++ Tip] 9. memset, memcpy
·
Language/C언어
C언어 memset, memcpy 함수 사용법C언어에서 배열을 다루기 위한 여러 함수들이 있으며, 이 중에서 memset과 memcpy는 가장 기본적이면서도 중요한 함수이다. 이들 함수는 메모리 관리와 배열 조작을 효율적으로 수행할 수 있도록 도와준다.⭐1. memset 함수void *memset(void *ptr, int value, size_t num);ptr: 설정하고자 하는 메모리의 시작 주소value: 메모리에 설정할 값. int형으로 전달되지만, 실제로는 unsigned char로 변환되어 메모리에 저장된다.num: value로 설정할 바이트의 수#include #include int main() { int array[10]; memset(array, 0, sizeof(array))..
[C/C++ Tip] 8. 배열과 포인터
·
Language/C언어
C언어에서 포인터는 변수의 메모리 주소를 저장하는 변수이다. 배열과 포인터는 밀접하게 관련되어 있으며, 이 둘을 연결지어 이해하면 C언어의 메모리 관리에 대한 깊은 이해를 얻을 수 있다. 이번에는 배열과 포인터의 관계에 대해 설명한다.⭐1. 배열과 포인터의 관계​​C언어에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용될 수 있다. 예를 들어, int numbers[5]; 배열이 있다면, numbers는 &numbers[0]와 같은 주소를 가지고 있다. 이것은 배열의 이름이 첫 번째 요소의 주소를 가리키는 포인터로 동작한다는 것을 의미한다.int numbers[5] = {10, 20, 30, 40, 50};int *p = numbers; // 또는 &numbers[0]printf("%d\n"..
[C/C++ Tip] 7. 배열의 기초
·
Language/C언어
C언어에서 배열은 같은 자료형의 변수들을 하나의 이름으로 묶어서 관리하는 자료 구조이다. 배열을 사용함으로써 변수들을 효율적으로 관리할 수 있으며, 인덱스를 통해 각 요소에 접근할 수 있다. 이 글에서는 C언어의 배열 기초, 배열의 선언과 초기화, 그리고 배열을 사용하는 몇 가지 예시를 다룬다.⭐1. 배열의 기본 사용법C언어에서 배열은 다음과 같이 선언한다.자료형 배열이름[배열의 크기];예를 들어, int 자료형으로 10개의 정수를 저장할 수 있는 배열을 선언하려면 다음과 같이 작성한다.int numbers[10];⭐2. 배열의 초기화배열은 선언과 동시에 초기화할 수 있다. 초기화는 배열을 선언하면서 동시에 특정 값으로 각 요소를 설정하는 것을 의미한다. 하지만 특정 값으로 초기화하지 않을 경우, 컴파일..
[C/C++ Tip] 6. UNION 공용체와 STRUCT 구조체로 패킷 만들기
·
Language/C언어
Union 은 C 언어에서 서로 다른 데이터 타입을 하나의 메모리 공간에서 저장할 수 있게 하는 키워드이다. 이는 구조체(struct)와 비슷하지만, Union  내의 모든 멤버가 같은 메모리 주소를 공유한다는 점에서 차이가 있다. 결과적으로, 한 시점에 하나의 멤버만 저장하고 사용할 수 있으며, 가장 큰 크기의 멤버에 의해 union의 전체 크기가 결정된다. 이를 통해 메모리를 효율적으로 사용할 수 있지만, 멤버 간에 값의 오버라이트가 발생할 수 있다는 점을 유의해야 한다.⭐1. Union 사용법#include union Data { int i; float f; char str[20];};int main() { union Data data; data.i = 10; pri..
[C/C++ Tip] 5. 구조체 패딩의 필요성
·
Language/C언어
구조체 패딩은 컴퓨터 메모리에서 데이터를 효율적으로 접근하기 위해 사용되는 개념이다. 컴퓨터 아키텍처 대부분은 특정 데이터 타입을 메모리의 정렬된 주소에서 읽고 쓰는 것을 선호한다. 예를 들어, 많은 시스템에서는 4바이트 정수(int)를 4바이트 경계에서 시작하는 메모리 주소에서 접근하는 것이 더 빠르다. 이러한 정렬 요구 사항을 충족시키기 위해 컴파일러는 구조체 내의 필드 사이에 "패딩" 바이트를 추가하여 메모리 접근 속도를 최적화한다.⭐1. 구조체 패딩의 필요성1.1.메모리 접근 속도 최적화: 데이터를 그들의 자연 정렬 경계에 맞춰 저장함으로써, CPU는 메모리에서 데이터를 더 빠르게 읽고 쓸 수 있다.1.2.플랫폼 호환성: 다양한 플랫폼과 아키텍처에서 코드의 동작을 일관되게 유지한다.⭐2. 패딩이 ..
[C/C++ Tip] 4. 구조체 활용: 효율적인 데이터 관리
·
Language/C언어
C언어의 구조체(struct)는 서로 다른 자료형을 하나로 묶어 새로운 형태의 복합 데이터 타입을 정의할 수 있게 해준다. 이는 데이터를 효율적으로 관리하고, 코드의 가독성과 유지 보수성을 향상시킬 수 있는 강력한 도구이다. 이번 포스팅에서는 구조체를 통해 더 깔끔하고 효율적인 코드를 작성하는 몇 가지 팁과 예제를 제공한다.전통적인 프로그래밍 언어에서는 변수를 사용하여 데이터를 저장했다. 그러나 변수만으로는 서로 관련된 여러 데이터 항목을 효율적으로 관리하기 어려웠다. 예를 들어, 학생의 정보(이름, 나이, 성적 등)를 처리하려면 각 항목을 별도의 변수로 관리해야 했고, 이러한 변수들 사이의 논리적 연관성을 코드상에서 명확히 표현하기 어려웠다. 구조체는 이러한 문제를 해결하기 위해 도입되었다. 구조체를 ..
[C/C++ Tip] 3. 코딩 규칙. 변수명 정하기
·
Language/C언어
C/C++ Tip 관련 세번 째 글이다. 뭘 작성할까 고민 하다가 코딩만큼 중요한 변수명 정하는 것으로 결정했다.변수명 정하기가 중요한 이유는 가독성 때문이다. 가독성이 높은 코드는 내가 아닌 남에게 보여주기 위함이다. 여기서 남이란 후배, 상사 뿐만 아니라 한달 뒤의 '나'도 남에 포함된다. 코드를 봤을 때 결과가 독서하는 것처럼 바로 유추가 되어야 한다.변수명 규칙은 네 개를 꼭 기억하면 된다. 함수의 input parameter(입력 인자, 입력 파라미터)는 i_{변수명} 함수의 output parameter(출력 인자, 출력 파라미터)는 o_{변수명} 함수의 local 변수(로컬, 지역 변수)는 l_{변수명} static 변수(정적 변수) 혹은 전역변수는 {변수명} 하나의 예시를 보겠다.#incl..
[C/C++ Tip] 2. #define의 목적
·
Language/C언어
#define은 왜 사용하는 걸까? 단순히 상수 처리하기 위해 define을 사용하는 것일까? 이를 알기 위해선 소스 코드의 변환 과정을 알 필요가 있다. ​ Build의 순서는 아래와 같다. exe 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 링크 -> 실행 mcu 헥사 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 어셈블리어 변환 -> 헥사 파일 생성 -> MCU 다운로드 ​ C언어를 처음 공부할 때, #define을 사용하지 않으면 전처리 과정을 거치지 않는다고 생각한 적이 있다. #으로 시작하는 문장은 전부 전처리기 지시자임에도 #include는 전처리기라고 생각하지 않았다. 항상 C언어를 실습할 때, 의무적으로 #inlcude 를 작성한 폐해이다. ​ 전처리란 무엇인가? 컴파일 ..
[C/C++ Tip] 1. 개발하기 전, typedef 별명 부여.
·
Language/C언어
#define은 왜 사용하는 걸까?단순히 상수 처리하기 위해 define을 사용하는 것일까? 이를 알기 위해선 소스 코드의 변환 과정을 알 필요가 있다. ​ ⭐1. Build 순서Build의 순서는 아래와 같다. exe 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 링크 -> 실행 mcu 헥사 파일 생성 : 소스코드 -> 전처리 -> 컴파일 -> 어셈블리어 변환 -> 헥사 파일 생성 -> MCU 다운로드 ​ C언어를 처음 공부할 때, #define을 사용하지 않으면 전처리 과정을 거치지 않는다고 생각한 적이 있다. #으로 시작하는 문장은 전부 전처리기 지시자임에도 #include는 전처리기라고 생각하지 않았다. 항상 C언어를 실습할 때, 의무적으로 #inlcude 를 작성한 폐해이다. ​⭐2. 전..
2byte 정수를 1byte 배열로 나누기 (Feat. EEPROM)
·
C, C++
MCU는 전원이 꺼지고 켜진 경우 (POR : Power on Reset) 처리된 데이터(static 변수, 지역 변수, 매개 변수) 들은 메모리 상에서 남아있지 않고 사라진다. 그래서 MCU가 꺼지고 다시 켜졌을 경우, 데이터를 저장해야 할 때가 있다. 아두이노는 이 역할을 하는 내장 메모리가 있으며, 이를 EEPROM이라고 한다. (하드 디스크처럼 기간과 횟수가 그리 많지 않음.) (초기 ROM(Read Only Memory)로 오로지 공장에서 출하 과정에서 메모리에 write가 되면, 그 이 후부턴 read 밖에 할 수 없었음. read 만 할 수 있는 문제를 해결하기 위해 자외선을 통해 몇 번의 write를 할 수 있는 EPROM이 개발됨. 조금 더 시간이 흘러 자외선이 아닌 전기로 write가 ..
18진수
'C언어' 태그의 글 목록 (2 Page)