전체 글(58)
-
컴파일러
컴파일러는 Source code을 컴파일 과정을 통해 목적 program으로 바꿔주는 과정을 말한다. 여기서 source code이란 C/C++, JAVA와 같은 언어들을 말하는데 이것들은 우리가 이용하는 자연어와 비슷하다.이 자연어를 기계어로 변형하고 이 기계어를 해당 기계에 돌아가도록 program으로 만들어주는 것이다. 그렇지만 기계들은 매우 다양한 종류가 있으며 기계어는 2진수로 이루어져 있고 이것은 하드웨어에 종속적이다. 그러므로 어떤 프로세서를 따르냐에 따라 다르게 해석되게 된다.ex) MIPS, RISC-V, AMD 등 위의 해석 내용은 컴퓨터구조를 따로 공부해서 봐야한다. 컴파일러와 비슷한 개념으로 interpreter가 있는데 interpreter와 컴파일러의 차이는 source prog..
2024.12.19 -
Dereferencing null pointer
malloc같은 함수 이용 시 메모리 할당에 실패하면 null이 return 되는데 말 그대로 null pointer를 역참조할 수 있다는 것을 warning으로 나타낸 것이다. 이 문제는 그냥 할당만 하고 null인지 아닌지 check를 하지 않을 경우 visual studio compiler에서 warning을 띄워주게 된다. 간단한 프로그램이나 개발자 자신이 확실하게 알고 있다면 문제가 없지만 나중에 directX api 이용시 꼭 확인해야하고 큰 규모 프로그램을 이용하게 된다면 항상 확인하는 것이 좋다. if문을 이용하여 null이 발생한다면 따로 처리해주자
2023.10.23 -
c++ stream 상태
std:: ios 입출력 클래스 비트 플래그 goodbit eofbit failbit badbit 메서드 good() eof() fail() bad() 로 상태를 나타낸다 cin에서 알아볼 수 있다. #include #include using namespace std; void printStates(const std::ios& stream) { cout
2023.08.28 -
inline 함수
c++의 inline 함수는 함수 호출의 오버헤드를 줄이기 위한 기능이다. 다른 언어들에서는 함수를 호출 했을 때 스택에 올리면서 함수를 호출하게 된다. 그래서 간단한 함수를 이용할 때도 항상 스택에 올리게 되는데 그 때의 overhead를 막기 위해 inline을 이용한다. inline은 코드 복사 붙여넣기와 비슷한데 컴파일러가 읽은 후에 그냥 코드를 복사 붙여넣기 하여 함수에 올리지 않고 이용하게 된다. inline int getNum() { return num; } inline void print() { cout
2023.08.24 -
c++ string class 구현
알아야 할 것 *this 사용 이유 하나의 클래스에서 생성된 인스턴스는 각자 고유의 주소를 가진 메모리 공간을 갖지만, 멤버함수는 모든 인스턴스가 공유한다. 멤버 함수는 자신을 호출한 객체를 인수를 통해 전달 받아야 한다. 그 때 전달해주는 것이 자신의 포인터 *this이다. 들어갈 함수 문자열을 추가해주는 insert 함수 문자열을 삭제하는 erase 함수 문자열에서 어떤 문자를 찾는 find함수 새로운 문자를 넣고 할당하는 assign함수 insert 함수 /* add after loc index*/ Mystring& Mystring:: insert(int loc, Mystring& str) { if(loc = this->stringlen) { cout my_string; thi..
2023.08.22 -
요소들을 그룹 지어서 개수 세기
배열에 같은 수들을 그룹지어서 개수를 세는 과정 int num[LENGTH] = { 2,2,7,7,7,7,5,7,7 }; int groupCount = 0; for (int i = 0; i < LENGTH; i++) { if (i == 0 || num[i] != num[i-1]) { groupCount++; } } index가 0이면 음수 index가 나오므로 예외처리 i+1을 확인하는 것보다 i -1 보는 것이 더 깔끔하고 확인이 쉽다. i+1이라면 마지막 값을 예외처리 해주어야함
2023.08.22