임베디드

임베디드

  • 분류 전체보기 (1142)
    • PL (150)
      • C++ (108)
      • Python (39)
      • Java (3)
      • Kotlin (0)
    • 알고리즘 (462)
      • 암기 (91)
      • 백준 (328)
      • 삼성 (17)
      • 종만북 (4)
      • 프로그래머스 (22)
    • 임베디드 (411)
      • 하드웨어지식 (12)
      • ATmega128 (98)
      • 32F429IDISCOVERY (57)
      • 임베디드리눅스 (15)
      • 리눅스커널스터디16기 (2)
      • 리눅스시스템프로그래밍 (97)
      • 운영체제 (26)
      • 컴퓨터구조 (4)
      • dd (1)
      • ubuntu (81)
      • opencv (18)
    • 드론 (99)
    • TIP (12)
  • 홈
  • 태그
  • 방명록
RSS 피드
로그인
로그아웃 글쓰기 관리

임베디드

컨텐츠 검색

태그

#linuxbirthday_a_message_from_Seoul_Korea !!

최근글

댓글

공지사항

아카이브

PL/C++(108)

  • cin으로 방어적 프로그래밍

    2019.10.31
  • std::array와 std::vector 차이

    2019.10.30
  • 디버깅으로 쓰이는 assert

    2019.10.30
  • char *과 const char *

    2019.10.25
  • constexpr

    2019.10.23
  • __cplusplus 매크로 의미

    2019.10.19
cin으로 방어적 프로그래밍

프로그램을 만들 때 사용자의 입장에서 생각해야 한다. 사용자가 입력 범위를 벗어나도, 프로그램을 종료하지 않고 경고 메세지를 띄우거나 따른 조치를 취해야만 한다 1. 하나의 입력에서 여러 데이터를 입력해서 버퍼에 남아있을 때 - cin.ignore은 버퍼를 비워주는 행위로, (비워야하는 최대 사이즈, delimeter)로 최대 사이즈에서 마지막으로 delimeter를 만날 때까지 비워주게 된다 2. 입력 범위를 초과하는 값을 입력했을 때 - cin.fail로 검사할 수 있으며, 위 조건을 만족했을 시 true를 반환한다 #include using namespace std; int main(void) { int x, y; char op; cin >> x; cin.ignore(32767, '\n'); cin..

2019. 10. 31. 16:15
std::array와 std::vector 차이

가장 큰 차이는 고정된 크기와 유동적인 크기에 있다. std::vector는 멤버함수로 resize를 가지고 있지만, std::array는 가지고 있지 않다. 즉 선언할 때 std::array는 반드시 크기를 명시해야지만 std::vector는 push_back 멤버함수로도 사이즈를 동적으로 늘릴 수 있다는 특징이 있다 단 std::array를 쓰는 이유는 기본 C에서 배열을 명시하는 것보다는 size, swap 등 다양한 함수와 연산자가 가능하기에 사용하는 것이다 #include #include using namespace std; int main(void) { array arr = { 1, 2, 3, 4, 5 }; for (int& u : arr) { cout

2019. 10. 30. 10:06
디버깅으로 쓰이는 assert

디버깅모드로 동작시킬 때 사용자가 아닌 컴퓨터에게 디버깅을 맡겨서 보다 편하게 할 수 있게 하는 함수다. 컴파일 단계가 아닌 런타임 단계에서 에러를 출력한다 assert(식)을 쓰게 되는데, 식이 거짓이라면 오류를 출력한다. 장점이 오류가 발생한 라인도 출력을 해준다 #include #include using namespace std; int main(void) { assert(false); return 0; } 단, Release 모드이고 전처리기 명령에 NDEBUG; 명령이 추가되면 assert 실행이 되지 않는다 주로 API를 작성할 때, 디버깅 도구로 많이 사용된다. 예를 들어 사용되지 않는 메모리를 읽으려고 할 때 오류가 발생한다 #include #include #include using nam..

2019. 10. 30. 09:24
char *과 const char *

char *, const char * 둘의 차이는 문자 상수를 참조할 수 있느냐의 여부에 있다. 다음과 같이 컴파일 에러와 표현되지 않은 식을 보면서 대략 유추할 수 있다 char*은 문자열 상수를 가리키지 못하고, const char *은 문자열 상수를 가리키지만 그 주소에 다른 값을 씌울 수는 없다. 결국 둘 다 메모리에 있는 임시 문자열 상수에 대한 변화는 불가능하다는 것이다 따라서 읽기 전용인 const char * 자료형을 함수 매개변수로 문자열을 넘길 때 많이 사용하게 된다

2019. 10. 25. 01:48
constexpr

const와 똑같이 상수 초기화 역할을 하나, 컴파일 타임에 평가될 수 있는 차이가 있다. 따라서 변수를 할당받아 초기화될 수 없다 #include int main(void) { int i = 3; const int a = i + 3;// 컴파일 성공 constexpr int b = i + 3;// 컴파일 에러 return 0; } 예를 들어 배열 크기로 변수를 넣을 때 컴파일 상수는 되지만, 런타임 상수는 되지 않는다 #include int main(void) { int temp = 5; int size1 = 10; const int size2 = temp + 5; const int size3 = 30; constexpr int size4 = 40; int arr1[temp];// 컴파일 에러 int ..

2019. 10. 23. 00:40
__cplusplus 매크로 의미

https://noel-embedded.tistory.com/1078 해당 글에서 extern "C"의 의미를 대략 파악했다. 결국에는 c 소스를 cpp에서 가져다 쓸 때 맹글링 작업을 막는 것이다 stdlib.h 안에 내용인데 ifdef __cplusplus가 정의되어 있다 다시 한 번 복기하면 extern "C"는 cpp 소스가 c 소스를 include 했을 때 맹글링 방지를 위한 도구였다. 그런데 코드는 그래도 있고, 만약에 c소스에서 c소스를 불러온다면 어떻게 될까? 컴파일 에러가 난다. 왜냐하면 extern "C"는 cpp에서만 정의되는 식별자이다. 따라서 c, cpp에 대해서 모두 불러와지기 위해서는 컴파일러를 검사한 후 cpp이라면 extern 처리를 해주는 것이다 따라서 보통 ifdef _..

2019. 10. 19. 01:03
1 2 3 4 5 6 ··· 18
티스토리
© 2018 TISTORY. All rights reserved.

티스토리툴바