프로그래밍/C++
[Arduino/C++] 시리얼 모니터 데이터 공백구분으로 입력받기, 명령어 처리
// 생성자의 여러번 호출을 막기 위해 전역 변수로 String 변수 2개를 호출한다. String input; String args; void setup() { Serial.begin(9600); } void loop() { //시리얼 데이터가 들어왔을때 (버퍼에 내용이 채워졌을때) 작업 if(Serial.available() > 0) { input = Serial.readStringUntil('\n'); //엔터까지 입력받기 Serial.println("INPUT : " + input); for(int i = 0; i < input.length(); i++ ) { char c = input[i]; //공백이 아닌경우만 문자열에 결합시킨다. (담아준다.) if(c != ' ') { args.concat..
프로그래밍/C++
[C++] 연산자 오버로딩 (Operator Overloading)
* 본 글을 읽기 전에 미리 구조체와 C++의 Class 개념에 대해 미리 알고 학습을 하는 것을 권장드립니다. 일반적으로 C언어에서 사용하는 +, -, ==, [] 와 같은 기본 연산자들은 모두 C언어에서 기본적으로 정의 되어 있는 데이터 타입 (int, double, char 등) 에서만 사용 가능한 연산이였기에, 사용자가 정의해서 만든 타입인 구조체로 만든 구조체 변수의 경우 이러한 연산자를 적용할 수 없었습니다. #include struct point{ int x; int y; }; int main(){ struct point pos1 = {10,20}; struct point pos2 = {20,40}; if(pos1 == pos2){ //오류 발생 printf("same"); } return ..
프로그래밍/C++
[C++] 모든 인자값을 레퍼런스로 넘겨야 성능상 유리할까?
일반적으로 C++에서 레퍼런스를 인자로 받으면, 참조하는 타입의 모든것을 복사하는게 아닌 주소 한번을 넘김으로써 원본에 접근할 수 있어, 포인터 처럼 성능상의 이점을 취할 수 있습니다. 그러면 생각해낸게 "아 그럼 모든 인자는 레퍼런스로 받아야 성능이 좋을까?" 라는 생각이 문뜩들었습니다. 매우 큰 객체들은 (Struct, Class 변수) 레퍼런스로 받는게 당연히 빠를 것이나 그럼 int, double 같은 기본 값 타입들도 Call by Value가 아닌 Call by reference 로 받으면 빠르겠구나! 라고 대충 추정해보았습니다. 일단 레퍼런스로 받으면 빠르다라고 배웠으니깐요.. 그런데 찾아보니깐 아니더라구요.. 이에 관련하여 좋은 글을 작성해주신 분이 있어서 관련 링크를 첨부합니다. http..
프로그래밍/C++
[C/C++] 선언(Declaration)과 정의(Definition)의 차이
* 본 글은 학부생의 눈높이에 작성되었습니다 int a; int a = 10; 오류C2086'int a': 재정의 위 코드를 Visual Studio 에서 실행해보면 int a가 재정의(redefinition) 됐다는 오류 메세지가 출력되면서 컴파일이 되지 않습니다. 이런 오류 메세지는 컴파일러마다 다른데 재정의가 아니라 재선언(redeclaration) 이라는 오류 메세지가 출력되기도 합니다. 과연 정의와 선언의 차이는 무엇일까요? 정의와 선언은 다양한 프로그래밍 자료에서 혼동되어 사용되는 단어긴 하지만 엄밀히 따지면 이 둘은 다른것 입니다. 오늘은 이에 대해 알아보겠습니다. 선언(Declaration) vs 정의(Definition) 모든 정의는 선언을 포함하고 있지만 모든 선언은 정의가 아니다. 즉..
프로그래밍/C++
[C++] Natural Sort 사용하기
숫자, 이름이 여러 섞여 있는 내용의 문자열에 대해 윈도우 탐색기와 같은 정렬을 기대하려면 Natural Sort 라는 정렬을 시행해야 합니다. Natural Sort 란 쉽게 말해서 인간이 하는 방식으로 영문자 숫자를 정렬하는 방식을 이야기 합니다. 파이썬에선 natsort 라는 라이브러리가 있어서 그냥 pip install 로 설치하고 사용하면 끝이였는데 C++에서는 당연하게도 직접 구현해야 합니다. 제목을 보시면 알겠지만 Natural Sort 구현하기가 아니라 '사용하기' 입니다. 깃허브에 이미 친절하게 구현을 해둔 분이 있어서 이걸 사용하시면 됩니다. https://github.com/scopeInfinity/NaturalSort GitHub - scopeInfinity/NaturalSort: ..
프로그래밍/C++
[C++] Visual Studio <std::filesystem> 사용하기
서론기존에 대학교 프로젝트로 C언어를 이용해 파일 이름 변경기를 만든적이 있었습니다. C언어에는 string class도 없어서 문자열들을 배열에 동적으로 저장하고 싶으면 char[] 을 이용해서 동적할당으로 구현해야 했고, 이에 따른 버그가 다량으로 발생했습니다. (예를 들어서 파일 이름을 변경할 때 치환할 문자열이 너무 길거나 illegal 한 문자가 들어가면 프로그램이 그대로 튕겨버린다던가..., C에서는 예외처리 문법도 없습니다 ;;) 또한 디렉토리 내에 파일을 순회할 때 C언어에서 공식적으로 파일 시스템에 관한 기능이 제공되지 않아서 우회책으로 dirent.h 이라는 헤더 파일의 조금 수정된 버전을 이용해서 기능을 구현했던 기억이 납니다. *dirent.h를 사용해서 디렉토리 순회하는 방법에 관..
프로그래밍/C++
[C++] std_lib_facilities.h 헤더 파일 이란?
위와 같은 원서로 C++ 강좌를 듣고 있는데 std_lib_facilities.h 라는 난생 처음 보는 헤더 파일로 프로그래밍을 배우고 있습니다. 사실 수업만 따라가면 알 수 있는 내용이였으나 이 파일을 아예 처음 보셨다거나 수업에서 접하게 되었는데 설명없이 넘어가서 뭔지 모르겠다는 분들을 위해 이 헤더 파일이 무엇인지 간단하게 설명해드립니다. /* std_lib_facilities.h */ /* simple "Programming: Principles and Practice using C++ (second edition)" course header to be used for the first few weeks. It provides the most common standard headers (in th..
프로그래밍/C++
[C++] while(cin) 으로 자료형이 올바른 값을 계속 입력 받기
수업을 듣다가 아래 두개의 구문에 대한 의문이 생기게 되었습니다. 과연 정확히 이 두 표현식이 정확히 의미하는 바가 무엇일까? 오늘은 아래 코드에 대한 해석과 비교하는 것에 대해 다룹니다. while(cin) while(cin >> x) //What is the difference? C++ 앞 부분을 조금이라도 공부해보신 분들이 있다면 cin 이라는 것에 대해 아실겁니다. C언어에서 scanf와 대응되는 것으로 C++에서는 이라는 헤더 파일에 있는 녀석인데 서식 문자 없이 간편하게 입력을 받을 수 있죠. int x; cin >> x; 위 2줄의 코드를 이용하면 C++에서 간편하게 변수에 값을 입력 받을 수 있습니다. (데이터 타입에 상관 없이 cin이 알아서 입력을 잘 처리해줍니다.) 그런데 만약 저 위..
이모티콘창 닫기
울음
안녕
감사
당황
춤
피폐