C++문법 / Race condition, 경쟁상태 해결 - 뮤텍스, Mutex 여기까지 오면서 한 번쯤 생각해봤을 법한 "동시에 접근하면 어떡하지?" 예를 들고와보자 10만을 더하려고한다. 10개의 스레드를 통해서 하려고 한다. #include #include #include #include using namespace std; using namespace chrono; //해당 변수를 1 증가시키는 함수 void worker(int &result) { for (auto i = 0; i 프로그래밍 지식/C++ 2021.12.03
C++ 문법 / typedef, using, auto, decltype, constexpr, C++에서 우리가 조금 더 편의성을 가질 수 있게 하는 키워드들을 모아왔다. 알아보자 1. typedef typedef를 많이 썼다면 그것은 거의 구조체 만들 때 썼을 것이다. typedef를 선언해서 별명을 만든 것을 기억하는가? 해당 구조체가 이름으로도, 별명으로도 선언이 되어서 우리가 조금 더 짧게 쓰거나 편하게 호출할 수 있었다. **typedef는 새로운 자료형을 정의하는 것이 아니라 있던 자료형의 별명이다. 그러나 typedef는 비단 구조체에만 쓰이는 것이 아니었다. 열거체에도 쓰일 수 있다. 뿐만 아니라 사용자 정의 타입에도 다 쓰인다. 다만 암묵적인 규칙이 있다. typedef로 변환한 별명들에는 _t라는 접미사가 붙는다. 그래서 우리가 document를 볼 떄 _t가 있다면 유심히 보는.. 프로그래밍 지식/C++ 2021.12.03
C++문법 / 멀티 스레딩, Multi-threading 연산 우리가 스레드를 만드는 이유는.. 효율적으로 사용하기 위해서다. 1부터 10000까지 더하는 작업은 얼마나 걸릴까??? 물론 우리는 n(n+1)/2라는 것을 알고 있지만 컴퓨터는 한 번 경험을 통해서 알게 해주고 싶다. 해보자 우선 스레드 하나로 돌려보자 #include #include #include using namespace std; using namespace chrono; void func1(int *result) { for (int i = 1; i 프로그래밍 지식/C++ 2021.12.02
C++문법 / Thread, 스레드 - 생성, join, detach 이전에는 WIN API를 이용해야 했지만 C++ 11 에서부터 표준에 쓰레드가 추가되어서 우리는 그저 잘 사용해서 먹으면 된다. 그래서 thread 헤더를 이용해서 기본적인 실행을 해봤다. #include #include using namespace std; void func1() { for (int i = 0; i < 10; i++) { cout 프로그래밍 지식/C++ 2021.12.02
C++ 문법 / 기본 수학 연산 함수 기본 제공하는 함수라서 라이브러리가 필요없다. 실수 소수점 모두 버리기 올리기 floor : 소수점 모두 버리기 ceil: 소수점 모두 올리기 다시 말하면 천장과 바닥인데 5.67의 천장은 왠지 6일것 같고 바닥은 5일 것 같다? 는 맞다. 함수의 이름을 괜히 그렇게 짓는 것이 아니다. floor(5.67); ceil(5.67); 출력은 5 6 음수도 천장 바닥이 같아?????? floor랑 ceil의 의미를 파악해보자 ceil은 높다는 생각이 들고 floor는 낮다는 생각이 든다. 즉, ceil 하면 값이 커지고 floor하면 값이 작아진다. 다시 말해서 -2.3을 보면 -2.3을 ceil 하면 -2 -2.3을 floor 하면 -3이 되는 것이다. 다음은 실수에 대한 반올림 round: 반올림한다. 5.. 프로그래밍 지식/C++ 2021.12.02
C++문법/ 타입캐스팅, 캐스트 연산자 일반적으로 C에서는 형변환을 할 때 앞에 (바꾸려는 자료형) 원래 변수 이렇게 했지만 이렇게 바꾸는 것은 C언어 스타일의 문법이다. 아무조건 없이 해당 변수를 그냥 변경하는 것이다. 변경할 수 없을 때에도 변경을 시도하니 문제가 생기기 일쑤다. 이러한 형변환은 우리가 무조건 형변환이 된다는 것을 알고 있을 때나 가능하다. 그래서 C++에서는 4가지 형변환 연산자를 제공해준다. static_cast() //1 dynamic_cast() //2 const_cast() //3 reinterpret_cast() //4 1번은 가장 기본적인 캐스트 연산 방법이다. 2.번은 객체지향 언어의 다형성을 이용하여 모호한 타입 캐스팅 오류를 막아준다. 3번은 자료형이 가지고 있는 상수 속성을 제거한다. 4번은 어떠한 포인.. 프로그래밍 지식/C++ 2021.12.02
C++문법/ 오버로딩, Overloading 오버로드는 스타크래프트가 아니라 철자가 다르다. Lord - Load 아무튼 객체지향언어의 특징인 다형성을 위해 오버로딩이 나왔다. 알아보자 함수 오버로딩이란 하나의 함수가 여러가지 형태를 가지는 것이다. 여기서 여러가지 형태란 하는 일은 같지만 사용하는 매개변수가 다를 때를 말한다. 예를 들어 눈이 온다. 눈이 아프다. 에서 눈이 모양은 같지만 다른 의미로 사용되는 것과 비슷하다. 다시 말하자면 함수 오버로딩은 매개변수에 따라 달라진다. 만약에 두 함수가 같은 개수, 같은 데이터형의 매개 변수를 가지고, 매개변수의 순서까지 동일하다면 두 함수의 시그니처는 같다고 한다. ++ 이 때는 매개변수의 이름은 달라도 상관없다. (int x든 int y든 변수의 이름은 중요치 않다) C++에서는 서로 다른 시그니.. 프로그래밍 지식/C++ 2021.11.30
C++문법/ 함수 매개변수에서 * 과 &의 차이 ★★★★★ 짧게 설명하겠다. 주석에 달아놓았다. 내가 써놓은 참조 변수에 대해 보고 가면 더 좋다. [프로그래밍언어(Programming Language)/C || C++] - C++문법/ 참조 변수, reference + 참조의 특성 #include using namespace std; int func(int* ptr); // -> 포인터를 매개변수로 받음 int func(int& a); // -> 변수를 매개변수로 받지만 결국 해당 변수의 참조임 int main() { int x = 3; int* px = &x; cout 프로그래밍 지식/C++ 2021.11.30
C 문법/ 소스파일부터 실행파일까지, From source To exe 우리가 쓴 코드가 어떻게 실행되는 것일까? 컴파일러의 역할은 무엇일까? 중간 중간 산출물은 도대체 뭘 위해 필요한 것일까? 알아보자 소스파일, Source File (원시 코드라고도 한다) -> 프로그래밍 언어로 작성된 문서 (Text Editor로 쓰인 모든 문서) -파일형식( filename.c 또는 .cpp) Source File은 우리가 이해하기 쉬운 언어(프로그래밍 언어)로 쓴 것으로 Compiler를 이용해 어셈블리어라는 기계어 전 단계의 언어로 바꾼다. ** 누구는 컴파일러 자체가 기계어로 바꾼다하는데(사실이 아니다) 그렇게 Interface가 적어지면 범용성이 떨어진다. 중간에 Assembly 라는 Interface를 달아서 이식성과 범용성을 높인다. ++그러나 대부분의 컴파일러가 어셈블러.. 프로그래밍 지식/C++ 2021.11.30
C++문법/ 디폴트 매개변수, Default Parameter C에서 C++에 새로 추가된 기능인 디폴트 매개변수에 대해서 알아보자 디폴트 매개변수는 이름에서도 알 수 있듯이 함수 호출에서 실제 매개변수를 생략했을 경우 실제 매개변수 대신 사용되는 값이다. **(함수에서 매개변수를 가끔씩 빼먹어도 작동하는 이유다.) 예를 들어, void wow(int n)에서 n이 1로 내정되도록 디폴트 값을 지정했다치자. 그렇게 되면 실제 매개변수를 생략한 채로 wow( )를 호출하면 wow(1)과 같은 수행을 한다. 디폴트 매개변수는 정말 큰 융통성을 가져다 주는데 문자열과 n을 매개변수로 사용하여 그 문자열 앞에서부터 n 개 문자를 취하여 반환하는 left()라는 함수가 있다고 하자. ** substr(0, n)이 위에 것 아니냐? 라고 하면 공부 정말 많이한 사람이다. 좀 .. 프로그래밍 지식/C++ 2021.11.30