개발/C와 C++ 5

[c/c++] PSTR(), F() 플래시 메모리에 값 저장

[c/c++] PSTR(), F() 플래시 메모리에 값 저장 아두이노나 다른 보드에서 메모리를 저장하는 부분은 SRAM과 FLASH로 나뉘어 있다고 보시면 됩니다. FLASH는 동작할 코드들이 저장되며, 컴퓨터에서 디스크(HD, SSD)에 해당됩니다. SRAM은 각종 변수가 저장되며, 컴퓨터의 RAM에 해당됩니다. 따라서 FLASH보다 용량이 적습니다. 아두이노의 공식사이트(https://www.arduino.cc/en/Tutorial/Foundations/Memory)에 따르면 아두이노의 메모리는 아래와 같이 되어 있습니다. 보시다시피 보통 FLASH에 비해 SRAM은 아주 작은 용량임을 알 수 있습니다. 실제로 코딩을 하다가 변수가 많이 사용되거나, 긴 문자열이 사용될 때에는 SRAM이 부족할 경우가..

개발/C와 C++ 2022.10.30

[c/c++] #pragma once, 헤더파일 중복 피하기

[c/c++] #pragma once, 헤더파일 중복 피하기 C/C++에서는 헤더 파일의 중복으로 2번 불러와질 수 있습니다. 이때에는 컴파일러 에러를 띄울 수 있습니다. // aa.h int add(int a, int b); //bb.h include "aa.h" int remove(int a, int b); //main.c or main.cpp include "bb.h" include "aa.h" // 2번 선언되는 경우 int main(){ ... } 위의 코드에서 aa.h 이 두 번 include 되었음을 알 수 있습니다. bb.h 헤더파일에서 한 번 include 되었는데 main 코드에서 한번 더 include이 되었습니다. 이런 경우를 방지하기 위해서 2가지 방법이 있습니다. #ifndef ..

개발/C와 C++ 2022.10.02

[C/C++] -> 화살표 연산자와 . 도트(멤버) 연산자 차이점과 사용

-> 화살표 연산자와. 도트(멤버) 연산자 차이점과 사용 ptrStr->name = "aa"; 이런 화살표 연산자를 한 번쯤은 보셨을 겁니다. 사용상에 직감적으로 어느 구조체, 클래스에 name 변수에 접근한다는 것을 알 수 있으실 겁니다. 하지만 정확히 -> 와 . 의 차이점은 포인터인지 아닌지에 따라 결정됩니다. struct Character { int level; int rank; }; int main() { struct Character myCharacter = { 1, 100 }; myCharacter.level += 2; } 일반적인 구조체 모습입니다. Character 구조체에 level 변수에 접근하는 것은 도트(멤버) 연산자로 위와 같이 접근을 할 수 있습니다. struct Charact..

개발/C와 C++ 2022.09.03

[C/C++ Error] switch quantity not an integer

[C/C++ Error] switch quantity not an integer 스위치에는 정수 값을 넣어야 합니다. 정수 값을 넣지 않았을 경우에 발생하는 에러입니다. 저의 경우 실수 값을 넣었는데, 이를 해결하는 방법들을 아래에 작성합니다. 정수 변수로 변환_1 float num1 = 4.2; int num2 = num1; switch(num2) { ... case 4: ... break; ... } 정수 변수로 변환_2 float num = 4.2; switch((int)num) { ... case 4: ... break; ... }

개발/C와 C++ 2022.09.01

[C/C++] 메모리 할당(malloc, calloc, realoc, free)

[C/C++] 메모리 할당(malloc, calloc, realoc, free) C언어에서는 메모리를 할당할 때가 있습니다. 그때 사용하는 함수들입니다. allocation이 할당이라는 뜻을 가지고 있기에 함수의 이름으로 의미를 파악할 수 있습니다. 헤더파일에 있으며 다음과 같습니다. malloc (memory allocation - 메모리 할당) : 메모리를 할당한다. calloc (contiguous allocation - 연속 할당) : 메모리를 할당 및 초기화한다. realloc (resize allocation - 할당 크기 조절) : 메모리를 추가 할당한다. free : 메모리를 할당을 해제한다. 각각의 함수와 예시를 살펴보면 다음과 같습니다. void *malloc(size_t size); ..

개발/C와 C++ 2022.08.22