본문 바로가기

C, C++

(50)
VS Code CMake를 활용한 C++ 환경 셋팅 따라하기! cmake 설치 (설치 창에서 Add CMake to the system PATH for all users 체크!) ninja build 설치 및 환경 변수(시스템 환경 변수->Path) ninja 경로로 설정 https://github.com/mstorsjo/llvm-mingw 다운로드(영상에서는 ucrt-x86_64 받음) 및 환경변수 (다운폴더)/bin으로 설정(컴파일러 쓰는 거 있으면 생략) Visual Studio Code 설치 Code 확장 프로그램 : C/C++ Extension Pack 설치 CMake Tools 확장 프로그램 설정 -> Cmake : Generator 를 'Ninja' 대소문자 맞춰서 설정 프로젝트 만들고 코드 CMakeLists.txt, .vscode/c_cpp_prop..
굳이 지역변수를 멀리하지 않아도 됩니다. 제목이 좀 어그로지만;; 함수안에 지역변수를 정의했을경우 전역변수를 정의하는것과 다르게 컴파일러 재량에 따라 그 변수 메모리를 레지스터 공간 즉 일반 램 보다 더 빠른 공간에 할당시켜 줍니다. 그래서 임시로 사용할 숫자 같은건 그냥 함수 내에 정의하는게 좋습니다. C/C++ 기준이지만 다른 언어도 비슷할것이라 생각해요. 🙂 PS. 확인해본 결과 for문 같은 곳에서도 안쪽에 정의하나 바깥쪽에 정의하나 결과적으로 실행 동작이 같다면 컴파일러가 똑같은 최적화 이진 코드를 만들어냅니다!(최적화 옵션 켰을때 기준)
랜덤 함수 랜덤 함수를 사용하기 위해선 random 헤더를 포함해야 합니다.(srand, rand 함수만 사용하려면 stdlib.h를 포함) 랜덤한 수를 가져오기 위해서는 rand 함수를 사용합니다. rand 함수는 0부터 RAND_MAX(32767)까지의 랜덤 한 값을 출력합니다. int rand(); 그런데 이 랜덤 함수가 겉으론 랜덤이지만 실제로는 함수가 호출될 때마다 일정한 패턴으로 바뀌어 호출되므로 프로그램을 실행할 때마다 같은 숫자가 출력됩니다. 이를 방지하기 위해서는 시작 수를 정해주어야 하는데 다음 함수를 사용합니다. void srand(unsigned int seed); seed에 처음 시작 수를 넣어주면 되는데 이 수는 프로그램 실행마다 달라야 됩니다. 실행마다 달라질 수 있는 대표적인 수로는 시..
시간 함수 time 함수를 이용해서 현재 시간을 반환할 수 있습니다. #include #include //이 헤더가 포함되야 합니다. int main() { time_t now = time(nullptr);//time(&now);도 가능합니다. 인수와 반환이 제공하는 값이 똑같습니다. __time32_t now32 = _time32(nullptr);//time의 32비트 버전 __time64_t now64 = _time64(nullptr);//time의 64비트 버전 clock_t cl = clock(); printf("프로그램 시작 후 경과 시간(초) : %f\n", (double)cl / CLOCKS_PER_SEC); time_t now2 = time(nullptr); __time32_t now2_32 = _t..
수학 함수 수학 함수를 사용하려면 math.h 헤더를 포함해야 합니다. ​ 먼저 삼각함수부터 살펴보면, double sin(double x); double cos(double x); double tan(double x); double asin(double x); double acos(double x); double atan(double x); double sinh(double x); double cosh(double x); double tanh(double x); double atan2(double y, double x); 여기서 앞에 a가 붙은 함수들은 역삼각 함수이며, 뒤에 h가 붙은 함수들은 쌍곡선 삼각 함수입니다. 함수의 인수는 각도(degree)가 아니라 라디안(radian) 값을 받는데 이를 변환하기 위..
nullptr(NULL) 원래 포인터에서 없는 값을 0으로 나타냈습니다. C언어에서는 주로 이 0값을 NULL 이름의 매크로로 만들어서 사용했지만 C++ 11에서 nullptr이 추가되었습니다. #define NULL 0 int* ar; ar = NULL; ar = nullptr; int i = nullptr;//오류 nullptr은 숫자가 아닙니다. nullptr은 내부적으로 0값과 같지만 숫자로 취급되지 않고 없는 값으로 취급됩니다. 이로써 숫자 0과 없는 값의 구분이 명확해졌습니다. ​ 구분이 명확해지면 좋은 점은 다음과 같이 함수 오버 로딩이 가능합니다. #include void Func(int* i) { } void Func(int i) { } int main() { Func(nullptr);//위의 함수가 호출 Fun..
동적 할당 #include int main() { unsigned num; printf("사람 수 입력 :"); scanf_s("%u", &num); float weightAr[num];//오류 return 0; } 여기서 weightAr의 크기에 변수가 들어가면 안 됩니다. weightAr은 정적 할당, 즉, 프로그램이 실행되기 전에 메모리 크기가 정해지기 때문에 실행 시마다 바뀔 수 있는 num을 넣을 수 없습니다. 실행 중에 값이 정해지지 않는 상수만 넣을 수 있습니다. ​ 그래서 다음과 같이 동적 할당을 사용해야 합니다. #include #include int main() { unsigned num; printf("사람 수 입력 :"); scanf_s("%u", &num); float* weightAr = ..
goto goto문은 지정한 곳으로 코드 실행 위치를 이동시킵니다. 레이블 이름: 이 형식으로 이동할 곳에 레이블을 만들고 goto 레이블 이름; 이렇게 써서 이동시킵니다. int main() { int i = 0; back: if(i < 10) { i++; goto back;//back:으로 이동 } return 0; }