[C언어] 포인터의 이해
·
C, C++
보통 C언어에서 가장 어려워하는 부분은 포인터이다. 이 포스팅은 어떻게 하면 포인터를 더 쉽게 이해할 수 있을까 에 대한 경험과 고민이 섞여 있다. 회사 후배가 프로젝트 소스 코드를 보고 덕지덕지 추가되어 있는 포인터 인자들을 보고 지레 겁을 먹고 포인터에 대한 질문을 종종 한다. 요즘엔 대학교에서는 학생들이 C언어를 그리 선호하지 않는 것 같다. 아무래도 Low Level 언어인 C는 개발자들에게 불친절하고 포인터라는 큰 벽이 있고, 특히 Computer Science(CS) 분야가 각광받으면서 파이썬 위주로 프로젝트를 진행하기 때문 아닐까 추측해본다. (Low Level 언어 : 컴퓨터 중심 언어, 속도가 생명. High Level 언어 : 사람 중심 언어, 개발은 Low Level 보다 간단하나 속..
2byte 정수를 1byte 배열로 나누기 (Feat. EEPROM)
·
C, C++
MCU는 전원이 꺼지고 켜진 경우 (POR : Power on Reset) 처리된 데이터(static 변수, 지역 변수, 매개 변수) 들은 메모리 상에서 남아있지 않고 사라진다. 그래서 MCU가 꺼지고 다시 켜졌을 경우, 데이터를 저장해야 할 때가 있다. 아두이노는 이 역할을 하는 내장 메모리가 있으며, 이를 EEPROM이라고 한다. (하드 디스크처럼 기간과 횟수가 그리 많지 않음.) (초기 ROM(Read Only Memory)로 오로지 공장에서 출하 과정에서 메모리에 write가 되면, 그 이 후부턴 read 밖에 할 수 없었음. read 만 할 수 있는 문제를 해결하기 위해 자외선을 통해 몇 번의 write를 할 수 있는 EPROM이 개발됨. 조금 더 시간이 흘러 자외선이 아닌 전기로 write가 ..
[C, C++] #define을 사용하는 이유
·
C, C++
Build의 순서는 아래와 같다. 소스코드 -> 전처리 -> 컴파일 -> 링크 -> 실행 C언어를 처음 공부할 때, #define을 사용하지 않으면 전처리 과정을 거치지 않는다고 생각한 적이 있다. #으로 시작하는 문장은 전부 전처리기 지시자임에도 #include는 전처리기라고 생각하지 않았다. 항상 C언어를 실습할 때, 의무적으로 #inlcude 를 작성한 폐해이다. 전처리란 무엇인가? 컴파일 전에 처리해야 하는 일이고 전처리를 수행하는 장치를 전처리기라고 한다. 전처리기는 헤더 파일을 불러오거나, 소스 파일 내부의 특정 문자열을 상수 또는 문자로 치환하거나, 조건에 따라서 코드의 일부를 컴파일하거나 컴파일하지 못하게 하는 선택 기능을 제공한다. 궁금증이 하나 발생한다. #define은 왜 사용하는가?..
[CPP] strcpy_s 사용 예제
·
C, C++
strcpy : string copy char* strcpy(char *strDestination, const char *strSource) // strDestination : 복사 당하는 대상 // strSource : 복사할 대상 // return strDestination 포인터 // // _CRT_SECURE_NO_WARNINGS 발생하므로 사용 지양, strcpy_s 사용 지향 errno_t strcpy_s(char *dest, rsize_t dest_size, const char *src) // dest : 복사 당하는 대상 // dest_size : src 메모리 크기 // src : 복사할 대상 // return strDestination 포인터 #include using namespace..
[C] Call by Value VS Call by Reference
·
C, C++
Call by Value 와 Call by Reference 의 차이에 대해 이야기합니다. 아래 하나의 예제를 보겠습니다. #include void call_by_value(int test) { test = test + 10; printf("call by value address %p\n", &test); } int call_by_value_return(int test) { test = test + 10; printf("call by value address %p\n", &test); return test; } void call_by_reference(int *test) { printf("call by reference %p\n", test); *test = *test+1; } int main() { i..
[C] UNION 공용체와 Struct 구조체를 이용해 간단한 패킷 만들기
·
C, C++
안녕하세요. 오늘은 UNION과 STRUCT에 대해 이야기 하겠습니다. coding-yoon.tistory.com/119 [C] 구조체 포인터 접근과 최적화 요즘 기본기가 중요함을 느끼고 C를 공부하고 있습니다. 1. 구조체 단순히접근 #include //Struct packet 선언 typedef struct packet { int data0; int data1; int data2; }Packet; int main() { Packet p; //Str.. coding-yoon.tistory.com 구조체에 대한 이야기는 위에 작성했지만, 저보다 훨씬 자세히 적은 블로그 분들이 많기 때문에 따로 찾아보시길 바랍니다. UNION의 구조를 먼저 알아보겠습니다. UNION은 가장 사이즈가 큰 변수와 메모리를 공..
[C] 구조체 포인터 접근과 최적화
·
C, C++
요즘 기본기가 중요함을 느끼고 C를 공부하고 있습니다. 1. 구조체 단순히접근 #include //Struct packet 선언 typedef struct packet { int data0; int data1; int data2; }Packet; int main() { Packet p; //Struct Packet 정의 p.data0 = 0; p.data1 = 1; p.data2 = 2; printf("%d %d %d ", p.data0, p.data1, p.data2); return 0; } 2. 구조체 포인터로 접근 #include // Struct packet 선언 typedef struct packet { int data0; int data1; int data2; }Packet; int main(..
[C]BMP구조체 : #pragma pack(push,1 )사용하지 않고 정렬하기 2탄
·
C, C++
안녕하세요. 오랜만에 C언어에 대해 글을 씁니다. 오늘은 제목과 같이 #pragma pack(push,1)을 사용하지 않고 구조체만으로 정렬하는 방법에 대해 이어쓰겠습니다. 혹시 이해가 안가신다면 전에 글을 읽어주시기 바랍니다. https://coding-yoon.tistory.com/27 [C]BMP구조체 : #pragma pack(push, 1) 사용하지 않고 정렬하기 안녕하세요. 오랜만에 C언어에 대해 글을 써봅니다. 여러분들 BMP를 불러올 때 어떻게 하시나요? https://dojang.io/mod/page/view.php?id=703 C 언어 코딩 도장: 81.2 비트맵 구조체 작성하기 비트맵 파일의 구조.. coding-yoon.tistory.com #include // strcpy 함수가 ..
[C]BMP구조체 : #pragma pack(push, 1) 사용하지 않고 정렬하기
·
C, C++
안녕하세요. 오랜만에 C언어에 대해 글을 써봅니다. 여러분들 BMP를 불러올 때 어떻게 하시나요? https://dojang.io/mod/page/view.php?id=703 C 언어 코딩 도장: 81.2 비트맵 구조체 작성하기 비트맵 파일의 구조를 알아보았으니 이제 비트맵 구조체를 작성합니다. 이때 주의할 점은 반드시 구조체를 1바이트 크기로 정렬해야 한다는 점입니다. 즉, 비트맵 파일에서 각 정보는 위치와 크기가 정확하게 정해져 있으므로 반드시 구조체의 크기와 형태 그대로 읽어야 합니다. #pragma pack(push, 1) // 구조체를 1바이트 크기로 정렬 typedef struct _BITMAPFILEHEADER // BMP 비트맵 파일 헤더 구조체 { unsigned dojang.io 아마 ..
[C]BMP RGB 값 조절
·
C, C++
#include #include #include #include #pragma warning(disable:4996) #define _CRT_SECURE_NO_WARNINGS typedef uint8_t BYTE; typedef uint32_t DWORD; typedef int32_t LONG; typedef uint16_t WORD; /*********************************************************STRUCTS***********************************************************/ #pragma pack(push, 1) typedef struct tagBITMAPFILEHEADER { WORD bfType; //specifies..
18진수
'C, C++' 카테고리의 글 목록