본문 바로가기

전체 글

(28)
[c++] visibility 공부를 하는 입장이기 때문에, 내용에 오류가 있을 수 있습니다. 오류가 있다면 적극적으로 알려주시면 감사합니다! Visibility visibility란 공개 api 다룰 때 사용하는 기능이다. 어떤 클래스와 함수등 특정 심볼을 보여줄지 아닐지를 정해 다른 api와 충돌을 최소화하고 공개 라이브러리의 성능을 향상할 수 있다. gcc wiki에 이와 관련된 글이 있다. Visibility - GCC WikiNote: the text on this page was almost entirely written by Niall Douglas, the original author of the patch, and placed on nedprod.com. This copy in the GCC wiki has some ..
[c++] __VA_ARGS__, parameter pack 공부를 하는 입장이기 때문에, 내용에 오류가 있을 수 있습니다. 오류가 있다면 적극적으로 알려주시면 감사합니다! Variadic 매크로 Variadic 매크로는 __VA_ARGS__라는 식별자를 사용하며, 매크로 함수에서 가변인자를 받는 기능을 한다. 사용방법은 매우 간단한데, 입력받는 변수에 '...'(parameter pack)을 사용하고 실행하는 변수 부분에 __VA_ARGS__를 사용하면 된다.  #define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }int main() { CHECK1(0, "here %s %s %s", "are", "some", "varargs1(1)\n"); CHECK1(1, "here %s %s %s", "are", ..
[c++] 복사 생성자와 복사 대입 연산자 공부를 하는 입장이기 때문에, 내용에 오류가 있을 수 있습니다. 오류가 있다면 적극적으로 알려주시면 감사합니다!  class를 작성하면, 생성자나 소멸자처럼 우리가 작성하지 않으면 컴파일러가 자동으로 만들어주는 것이 더 있다. 대표적으로 복사 생성자와 대입 연산자가 있다. 복사 생성자 (copy constructor) 복사 생성자는 우리가 흔히 사용했는데, 객체를 다른 객체로 복사할 때 사용되는 특별한 생성자를 말한다. 기본적인 형태는 다음과 같이 생겼다. ClassName (const ClassName & other) { }  객체 복사에 대한 2가지 방법의 예시가 있다.#include class CopyableClass {public: int x = 0; CopyableClass() { ..
[c++] Range-based for loop (범위 기반 for 문) 공부를 하는 입장이기 때문에, 내용에 오류가 있을 수 있습니다. 오류가 있다면 적극적으로 알려주시면 감사합니다! Range-based for loop "표현식(expression)의 각 요소에 대해 문장(statement)을 반복적으로 순차적으로 실행합니다." 라는 범위 기반 for문은 배열이나 vector 등 순회가 가능한 expression속 요소들을 순회하는 기능을 한다.   기존의 for문과 다르게 시작지점과 끝지점을 정해주지 않아도 data list를 전부 순회한다. (파이썬의 for문 순회와 비슷)  for ( for-range-declaration : expression )  statement  위와 같은 방법으로 사용한다. expression 속 요소가 declaration 복사되어서 사용..
지뢰찾기 프로젝트 (2) Cell, linked list 만들기  cell 같은 경우는 게임 map에 존재하는 각 칸의 데이터를 담는 기능을 한다. cell에는 그 칸에 위치와 지뢰의 유무 등 게임에 필요한 정보가 담겨 있다.class Cell{private: int row; int column; int neighbor_mines_count; bool has_mine = false; bool opened = false; bool flagged = false;public: ......  linked list란 노드라는 데이터를 담고 있는 가장 작은 단위가 연결되어 있는 형태이다. 노드의 경우 data의 접근을 위해data를 public으로 선언했다.class Node{private: Node* prev; Node* n..
지뢰찾기 프로젝트 (1) 게임이 어떤 식으로 작동되어 있는지 궁금했었는데, 2학년 기말고사가 끝나고 지뢰 찾기를 만들어 보고 싶다는 생각을 했다. 그래서 3월 초중반동안 지뢰 찾기를 만드는 프로젝트를 진행했다.  프로젝트 초기 1. 지뢰찾기의 원리2. 어떻게 만들것인가3. 객체지향이란 무엇인가  이 3가지를 가장 처음 생각해 보았다. 처음에는 지뢰 찾기가 n x n 형태의 지뢰찾기를 생각해서 1부터 n^2 가지의 input을 받아서 상호작용하는 형태로 생각하였고 그렇다 보니 자연스럽게 n^2의 크기의 1차원 리스트를 만들어서 지뢰찾기 map에 관한 정보를 담고 이를 확인하는 형태로 만들어야겠다는 생각을 했고, 어떤 k번째 칸으로부터 주위의 8칸을 어떻게 찾을까 라는 생각으로 리스트 속 관계를 생각했다.  객체지향을 아직 내가 공..
04. C++만의 특징 2 공부를 하는 입장이기 때문에, 내용에 오류가 있을 수 있습니다. 오류가 있다면 적극적으로 알려주시면 감사합니다! Reference 참조자 같은 경우는 자신의 참조하는 변수를 대신할 수 있는 또 하나의 이름이라고 할수 있다. 쉽게 말하면, 변수의 또다른 이름을 만들어 주는 것을 말한다. 참조자를 사용하면 포인터의 기능을 사용할 수 있다. int num1 = 10; int &num2 = num1; &를 사용하는 것으로 조금 더 직관적으로 num1의 주소를 num2도 사용한다고 생각 할 수 있다. 참조자는 포인터도 생성이 가능하다. int num = 12; int *ptr = # int **dptr = &ptr; int &ref=num; int *(&pref) = ptr; int **(&dpref) =..
2023 임베디드 소프트웨어 경진대회 소감 제21회 임베디드 소프트웨어 경진대회 지능형 휴머노이드 부분에서 좋은 성적인 최우수상을 수상했다. 처음 경험한 대회였기 때문에 공부 외적으로 많은 걸 느낄 수 있었다.  이번 대회를 신청하게 된 계기가 로봇공학과지만 휴머노이드를 한 번도 해본 적이 없어서 궁금했고, 최근 동적제어가 굉장히 핫하다는데 모션제어조차 어떤 건지 잘 모르겠어서 해보게 되었다. 대회내용을 다시 정리하는 것을 진짜 얼마 전에 끝냈기 때문에, 이번 대회를 통해 느꼈던 것을 정리해보고자 한다. 소스 코드나 수식 계산의 원리 같은 거는 github에 어느 정도 정리가 끝났다고 생각해서 그 내용 + 내가 느꼈던 것을 정리하고자 한다. https://github.com/dy0221/2023ESWContest_humanoid_2005 GitH..